我试图绕过NSDictionary类,让我的TableView功能化。 是否有人能够分解并解释以下代码中发生的事情?欢呼声
if (!self.tableDataSource)
{
self.tableDataSource = [NSArray arrayWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"MenuData" ofType: @"plist"]];
self.navigationItem.title = @"Menu";
}
NSDictionary *dictionary = [[[self.tableDataSource objectAtIndex: indexPath.section] objectForKey: @"Children"] objectAtIndex: indexPath.row];
答案 0 :(得分:1)
您应该将DataSource和Delegate设置为指向tableView的所有者,然后实现UITableViewDelegate函数以正确设置表的内容。
编辑: 如果您计划实现带有节的表视图,我建议您使用以下的MxN数据结构:NSArray NSArray,这样您就可以轻松地访问vey:
cellData = [[datasource objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
答案 1 :(得分:1)
如果您只是解压所有方法调用以查看各种对象的隐含嵌套,我认为代码本身是相当清楚的。评论:
// if the current object's tableDataSource property has not been defined yet
if (!self.tableDataSource) {
// then define it.
// Set it to be an NSArray initialized by reading ...
self.tableDataSource = [NSArray arrayWithContentsOfFile:
// ... the plist file MenuData.plist found within the application's bundle
[[NSBundle mainBundle] pathForResource: @"MenuData" ofType: @"plist"]];
// and also set the current object's property nagitationItem.title to "Menu"
self.navigationItem.title = @"Menu";
}
// Now create a dictionary
// Get this dictionary by ...
// going to the element numbered indexPath.section in the tableDataSource
NSDictionary *dictionary = [[[self.tableDataSource objectAtIndex: indexPath.section]
// (assume that element is an NSDictionary)
// get that element's value stored witht the key "Children"
objectForKey: @"Children"]
// (assume that retrieved value is an NSArray)
// then get the element numbered indexPath.row from that array
objectAtIndex: indexPath.row];
// expect that value to be an NSDictionary
我认为TableDataSource上的Apple文档可能会为您提供有关此代码执行操作的更大背景信息。特别是,字典,数组,字典,数组中的嵌套,这是最后一行中正在进行的操作,可能是对行,列等的所有信息进行编码的标准方法,数据驱动UITableView。
答案 2 :(得分:1)
NSDictionary
个对象存储键引用的其他对象。键是用于引用字典中对象的唯一字符串。对象可以是任何对象。 NSMutableDictionary
是相同的,但允许在创建字典后编辑(添加/删除/更改)键的对象。
将NSDictionary(或任何不支持UITableViewDataSource
协议的类)设置为表视图的dataSource
属性是不正确的。最常见的是,您的视图控制器是UITableViewController
子类,或者它是支持UIViewController
或UITableViewDelegate
属性的UITableViewDataSource
子类。
这是你问题的直接答案。为了更全面地理解你应该回去阅读Apple的文档,以确保你理解我的答案。 “表视图控制器编程指南”将向您展示如何在视图控制器中实现表视图。对于其他您需要有关Objective-C和其他iOS对象的信息。