这不是“请帮我调试我的代码”的消息。我实际上有它的工作,但想要更深入地了解它是如何工作的!
我有一个基于视图的xCode应用程序。在我的主视图中,我有一个UITableView,我已将委托和dataSource设置为File的Owner。
在主ViewController的.h文件中,在@interface部分,我声明了一个NSMutableArray,它将包含一个自定义对象列表。
在@interface声明中,我包含了UITableViewDelegate和UITableViewDataSource协议。
稍后,在几次按钮点击之后,我的代码从服务器解析XML文件并将对象插入NSMutableArray。我将代码添加到了cellForRowAtIndexPath函数中,该函数被调用,当我为UITableView调用reloadData方法时,表格会填充从我的XML解析的结果!
非常酷,但我想了解这是怎么发生的;更好的理解将来对我有用。
我从未明确地将我的NSMutableArray绑定到该UITableView。为什么在将对象添加到数组时会调用cellForRowAtIndexPath?它是如何连接的?是因为NSMutableArray是在@interface块中声明的,它具有我上面提到的协议吗?如果我的.XIB上有两个UITableViews,那么代码如何知道应该将哪个NSMutableArray映射到哪个UITableView? (或者是我应该努力避免的事情?)即使我只在XIB上使用UITableView,如果我有两个NSMutableArrays,我是否必须关注它们以某种方式纠缠我的UITableView?
谢谢!
答案 0 :(得分:1)
NSMutableArray ---在您的情况下,它是在表视图中显示的数据。当显示必须发生时,表视图使用数据源询问数据。
如何连接 - 数据源要求数据没有其他显式连接。
如何处理2个表视图 - 理想的方法是为每个表视图提供不同的数据源对象,每个对象都有自己的NSMutableArray数据。
1个表视图和2个NSMutableArray - 它留给数据源实现,根据您的需要,您可以显示任何NSMutableArray对象的数据。
为什么在将对象添加到数组时会调用cellForRowAtIndexPath? - 您可能正在调用view reloadData
答案 1 :(得分:0)
每当你调用[tableView reloadData];调用您的cellForRowAtIndexPath方法和numberOfRowsInSection。
因为UITableViewDataSource协议。 NSMutableArray和UITableView之间没有任何联系。
当一个新对象被添加到数组中之后[tableView reloadData];将被召唤。因此,现在将为数组调用cellForRowAtIndexPath方法,该数组的计数将增加1。
希望这有益于此。 :)