xcode重新加载tableview
在我的应用程序中,我有一个tableview被来自NSMutableArray的值填充。这个可变数组被添加到一个单独的视图控制器中,所以我必须重新加载数据。xcode重新加载tableview
这可能是一个很简单的问题,但我已经读15+职位,他们都不应对的Xcode 4.2,并在准确把[self.tableView reloadData]。这个方法究竟应该放在哪里?当我尝试将它放在tableviews源代码中的不同位置时,tableview第一次初始化时没有任何值。
还是应放在其他viewcontrollers代码,在这种情况下,我怎么可以参考我的UITableView子类的特定实例正在使用?
非常感谢。
Xcode 4.2没有什么特别的地方可以在这里有所作为,所以你应该注意你有的其他来源发现,即使它们指向其他版本的Xcode。
它不必是[self.tableView reloadData]
准确。您发送表视图对象reloadData
消息。如何访问该表视图对象 - 通过自身属性,通过实例变量,通过另一个类中的属性等 - 取决于您。
如果您已经设置了tableView
属性,那么从另一个视图控制器重新加载数据的最简单方法是直接发送表视图对象reloadData
消息。因此,举例来说,如果在ViewControllerFoo
的方法有一个指针指向ViewControllerBar
称为bar
并且知道它应该重新加载其表视图,它可以调用[bar.tableView reloadData]
。
如果您没有设置属性,您可以自己创建它,也可以在保存表视图的视图控制器上创建一个代表其他视图控制器的reloadData
方法。
然而,这些方法混淆了逻辑和表示,这通常是一个非常贫穷的架构。如果一个视图控制器知道另一个视图控制器应该更新它的视图,那么很可能你应该将一些逻辑分解成独立于任何特定视图控制器的第三个类。第三类可以传送通知,或者您的视图控制器可以通过KVO监听其状态更改。
你做完[tableView reloadData];
的tableView将重新加载,并委托函数来获取表的内容
,如果你[的tableView reloadData]清除表
然后检查
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
你必须阅读错误的值有
您使用的是导航控制器吗?视图控制器是否将数组数据填充到表视图的顶部?如果是这样,请将reloadData调用放在viewwillappear中,因为当导航控制器的子视图弹出并且表视图现在再次可见时,它会被调用。
你应该检查你的数组是否正确实现。尝试在视图中输入时记录它,例如在方法-viewWillAppear中。
通常你会将[self.tableView reloadData]
置于-viewWillAppear
方法中。
您通常在设置为tableView的dataSource和委托的viewController的“viewDidLoad”方法中调用reloadData。但它并不重要,只要确保在每次更改数据模型(您的NSMutableArray)后调用reloadData。
从您的描述来看,reloadData不是您问题的可能原因。检查您是否已将viewController设置为tableView的dataSource属性。
此外,您通常使用的数据源,正如我在这里所假设的,而不是子类化TableView,因为您似乎正在做。
非常感谢回复。但我仍然不清楚在我的代码中放置重载方法的确切位置。当我把它放在[viewDidLoad]中时,我的tableview似乎完全绕过了你提到的两种方法。 – user1110415 2011-12-21 19:14:53
你的表视图的'delegate'和'dataSource'属性是否设置正确? – 2011-12-21 19:22:56