我想维护一个记录列表,每个记录都保持相同类型的数据。我想在两个不同的地方使用这些数据:
UITableView
从每条记录中获取“名称”值UIViewController
,它将所有数据用于不同的字段。我假设我应该使用plist来存储数据;我还假设应该接收UITableView
数据的对象是NSArray
,因此我可以使用cellForRowAtIndexPath
方法自动创建表。
所以我创建了plist“PLForArr.plist”:
似乎我只能在使用
调用plist时获得NSDictionaryNSString *path = [[NSBundle mainBundle] pathForResource:@"PLForArr" ofType:@"plist"];
NSArray * myArr = [[NSArray alloc] initWithContentsOfFile:path]; //doesn't work...
NSDictionary * myDict = [[NSDictionary alloc] initWithContentsOfFile:path]; //does work, but who to I make a NSArray out of it / or get the data from here to the UITableView?
我明白我不明白基本的东西......有人可以一步一步地带我:
MyArr
结束目标时使用的不必要的UITableView
吗? NSArray
或必须进入NSDictionary
?NSDictionary
填写行吗?答案 0 :(得分:2)
将数据存储在字典或数组中取决于您自己。根据您拥有的数据类型,您将考虑存储无序的对象集合(字典),使用键访问条目;或者更确切地说,在有序集合(数组)中,使用数字索引。
从属性列表文件中获取数组很好,但是根(顶级)对象是一个字典(在屏幕截图中,“MyArr”不是顶级对象,它是访问的关键你的数组在顶级字典中)。要从中获取数组,只需按照您的方式分配/初始化plist字典,然后使用其键([myDict objectForKey:@"MyArr"]
)访问数组条目。否则,请确保将属性列表的根对象设置为数组,然后重试NSArray
的{{1}}
真正的问题似乎是如何我可以用我的数据填充单元格?表视图询问其委托和dataSource,以显示要显示的部分中的行数。根据这些数字,它会向dataSource询问单元格。再一次取决于您选择的存储类型,您将以稍微不同的方式实现这些方法,但概念仍然存在。
您可能希望阅读有关以下内容的文档:
答案 1 :(得分:2)
存储数据是数组或字典取决于您。但是如果你想随着时间的推移对其进行更改,则无法将其存储在主包中。
您的pList文件是包含数组的字典。请参阅下面的代码示例。
您必须将字典存储在数组中,以用于表的数据源。请参阅下面的代码示例。
假设您的UITableView的数据源名为tableArray。您可以使用tableArray填写表格和视图中的信息。哦是的,
NSString *path = [[NSBundle mainBundle] pathForResource:@"PLForArr" ofType:@"plist"];
NSDictionary *myDict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSArray *myArray = [myDict objectForKey:@"MyArray"];
self.tableArray = [myArray copy];
[myArray release];
[myDict release];
这在tableView:cellForRowAtIndexPath:
中cell.text = [[tableArray objectAtIndex:row]objectForKey:@"Obj Name"];