Xcode4 无法从子视图更新superview中的表

Xcode4 无法从子视图更新superview中的表,xcode4,subviews,uitableview,Xcode4,Subviews,Uitableview,我使用的是Xcode 4.3,虽然我已经做了很多年的程序员,但我在Xcode中还是有点小麻烦 我有一个名为First的UIView,它包含一个从内存中的文件获取其内容的UITable。然后,我创建了一个名为Second的子视图UIView,它在数据文件中进行更改,这些更改应该在First中更改表的内容。当我删除第二个并返回到第一个时,毫不奇怪,表没有更新。下次从一开始加载第一个时,该表将反映所做的更改 首先包含viewDidLoad方法,该方法用于从文件中的数据加载NSArray,其中包含表所需

我使用的是Xcode 4.3,虽然我已经做了很多年的程序员,但我在Xcode中还是有点小麻烦

我有一个名为First的UIView,它包含一个从内存中的文件获取其内容的UITable。然后,我创建了一个名为Second的子视图UIView,它在数据文件中进行更改,这些更改应该在First中更改表的内容。当我删除第二个并返回到第一个时,毫不奇怪,表没有更新。下次从一开始加载第一个时,该表将反映所做的更改

首先包含viewDidLoad方法,该方法用于从文件中的数据加载NSArray,其中包含表所需的数据。我可以从第二个命令调用viewDidLoad,但除非该表从新更改的NSArray中更新,否则该表将显示为更改前的状态

所以我的问题是如何从Second调用table方法,以便在删除Second并返回到First时更新First中的表。我尝试调用将数据加载到表中的table方法,但由于出现编译错误而失败。我需要知道如何调用table函数,以便在返回第一个函数时更新表

我的问题至少有一部分是我不知道如何调用表更新,因为它不是像我预期的那样从viewDidLoad调用的

对不起,这是对问题的冗长描述。我正在编写的程序的其余部分大部分都在工作,我已经处理这个问题好几个月了。我每隔几周就回来一次,再尝试一次,但到目前为止运气不好。我真的很感激你能给我的任何帮助,这将提高我的理解和解决问题

下面是修复后的代码:first(superview)相关代码

 -(void)viewDidLoad {  
    NSFileManager * fm = [[NSFileManager alloc] init];  
    NSError* err = nil;  
    NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.dir'"];  
    NSArray *array = [fm contentsOfDirectoryAtPath: userFolder error:&err];  
    self.listData = [array filteredArrayUsingPredicate:fltr];  
    [self.tableView reloadData]; //This does the updating must make table an IBOutlet as  
    [super viewDidLoad];         //described in one of the comments by m. Othman  
}    
下面是修复后的代码:第二个(子视图)相关代码。此代码位于 在进行更改的方法中,这些更改会影响表的显示

UIView * start = [self.view superview]; //this line and next two call viewDidLoad in first  
UIResponder * nextResponder = [start nextResponder];  
[nextResponder viewDidLoad];  

你看过报纸了吗?除了-viewDidLoad之外,还有更多选项用于处理视图的(重新)外观…

嗯,
UITableView
代理仅在加载视图时或当您要求它重新加载时调用..
因此,在viewDidLoad或任何应该更改tableview内容的方法中,您需要编写这一行

[tableview reloadData];

我希望我能理解你的问题

Joshua-我试过ViewWillDisplay、ViewDidDisplay、viewDidLoad和loadView。你还有其他建议吗?在我看来,与其调用不同的方法,我还需要包含一个方法来重新绘制表。你怎么认为?Waldoyor的措辞让我担心,您试图直接调用这些方法,而不是在视图控制器类中实现它们,以便系统在适当的时间调用。我尝试过从子视图调用函数,以及删除子视图并让superview中的函数处理它。然而,我并没有用所有不同的功能来实现这两种方式。我要试一试。谢谢,Joshua-如果我理解你的建议-superview中刚刚更新NSArray的代码名为“viewDidLoad”。我将该名称更改为其他三个内置方法:ViewWillDisplay、ViewDidDisplay和loadView。即使最初显示表格,这三种方法都不能正常工作。如果我不明白你的建议,请解释。我的问题是,我不理解表是如何更新的,因为该方法不是从viewDidLoad方法体中调用的。再次感谢您的建议。我将继续询问hope是否同意。以下是第一行中的相关代码-(注意最后一行的下一行是重新加载表数据的代码)(void)viewDidLoad{NSFileManager*fm=[[NSFileManager alloc]init];NSError*err=nil;NSPredicate*fltr=[NSPredicate predicateWithFormat:@“self ENDSWITH”.dir'];NSArray*数组=[fm contentsOfDirectoryAtPath:userFolder错误:&err];fm=nil;self.listData=[array filteredArrayUsingPredicate:fltr];[self.tableView重载数据];[super viewDidLoad];}下面是第二个子视图M中的相关代码。奥特曼,这正是我想要的,对我来说很有意义。但是,当我输入这行代码时,它表示不知道标识符tableview。我的tableview拼写为tableview,但这没有什么区别。显然,我需要在.h文件中声明tableView,但后面有一个相当长的参数列表,不清楚声明中应该包含什么。对不起,这应该是我知道怎么做的,但是不要。希望您能帮助我。您只需要为tableview声明一个插座,如IBOutlet UITableView*tableview;并将其链接到interface builder中的表视图…M。奥特曼-超级,成功了。顺便说一句,这是我在网上问的第一个问题。过去,当我有一个问题时,我只是顽强地坚持下去,通过尝试和谷歌搜索我遇到的问题。如果你在附近,我会陪你喝一杯或其他什么(我在格里利,如果你在附近的话,一起来找我)。Waldoam很高兴它能与您合作,这不是一个羞耻的问题,我以前有过这个问题,其他人也有过,将来也会有。。。谢谢你的提议,我一定会的:)