需要帮助理解NSDictionary对象

时间:2011-04-10 11:42:27

标签: iphone objective-c ios uitableview nsdictionary

我试图绕过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];

3 个答案:

答案 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子类,或者它是支持UIViewControllerUITableViewDelegate属性的UITableViewDataSource子类。

这是你问题的直接答案。为了更全面地理解你应该回去阅读Apple的文档,以确保你理解我的答案。 “表视图控制器编程指南”将向您展示如何在视图控制器中实现表视图。对于其他您需要有关Objective-C和其他iOS对象的信息。