在我的应用程序中,我有一个由NSMutableArray的值填充的tableview。这个可变数组被添加到一个单独的视图控制器中,因此我必须重新加载数据。
这可能是一个非常简单的问题,但我已经阅读了15篇以上的帖子,而且它们似乎都没有解决xcode 4.2,以及确切地放置[self.tableView reloadData]。这个方法到底应该放在哪里?当我尝试将它放在tableviews源代码中的不同位置时,tableview第一次初始化而没有值。
或者它应该放在其他viewcontrollers代码中,在这种情况下如何引用我正在使用的UItableview子类的特定实例?
非常感谢。
答案 0 :(得分:2)
Xcode 4.2没有什么特别之处,这里应该有所不同,所以你应该注意你找到的其他资源,即使它们引用了其他版本的Xcode。
它不一定是[self.tableView reloadData]
。您向表视图对象发送reloadData
消息。如何访问该表视图对象 - 通过self上的属性,通过实例变量,通过另一个类中的属性等 - 取决于您。
如果您已经设置了tableView
属性,那么从另一个视图控制器重新加载数据的最简单方法就是直接向表视图对象发送reloadData
消息。因此,例如,如果ViewControllerFoo
中的方法有一个指向ViewControllerBar
的指针bar
并且知道它应该重新加载其表视图,那么它可以调用[bar.tableView reloadData]
。
如果您没有设置属性,可以自己创建,也可以在视图控制器上创建一个reloadData
方法,并保存代表其他视图控制器执行此操作的表视图。 / p>
然而,这些方法混淆了逻辑和表示,这通常是一个相当糟糕的架构。如果一个视图控制器知道另一个视图控制器应该更新其视图,那么很可能,您应该将某些逻辑分解为独立于任何特定视图控制器的第三个类。第三类可以传输通知,或者视图控制器可以通过KVO监听其状态的变化。
答案 1 :(得分:0)
执行[tableView reloadData];
之后tableView将重新加载和委托函数以获取表格内容
如果你[tableView reloadData]清除你的表
然后检查
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
你必须在那里读错了值
答案 2 :(得分:0)
您使用的是导航控制器吗?填充表视图顶部的数组数据的视图控制器是?如果是这样的话,请在viewwillappear中调用reloadData,因为当弹出导航控制器的子视图并且表视图现在再次可见时,会调用它。
答案 3 :(得分:0)
您应该检查阵列是否正确实现。在视图中输入时尝试记录它,例如在方法-viewWillAppear。
中通常您将[self.tableView reloadData]
放在-viewWillAppear
方法中。
答案 4 :(得分:0)
您通常在viewController的“viewDidLoad”方法中调用reloadData,该方法被设置为tableView的dataSource和delegate。但这并不重要,只要确保每次更改数据模型(您的NSMutableArray)后都调用reloadData。
根据您的描述判断,reloadData不是您问题的可能原因。检查是否已将viewController设置为tableView的dataSource属性。
此外,您通常使用数据源,正如我在此假设的那样,而不是像您似乎正在做的那样继承TableView。