我一直在阅读关于这个话题的一堆内容,但我无法弄明白。
如果我有这样的plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>color</key>
<string>brown</string>
<key>height</key>
<real>40</real>
<key>length</key>
<real>75</real>
<key>level</key>
<real>2</real>
<key>name</key>
<string>bear</string>
<key>note</key>
<string>ugly, but strong</string>
<key>width</key>
<real>30</real>
</dict>
<dict>
<key>color</key>
<string>tan</string>
<key>height</key>
<real>20</real>
<key>length</key>
<real>30</real>
<key>level</key>
<real>4</real>
<key>name</key>
<string>dog</string>
<key>note</key>
<string>cute</string>
<key>width</key>
<real>8</real>
</dict>
<dict>
<key>color</key>
<string>chestnut</string>
<key>height</key>
<real>75</real>
<key>length</key>
<real>90</real>
<key>level</key>
<real>3</real>
<key>name</key>
<string>horse</string>
<key>note</key>
<string>fast</string>
<key>width</key>
<real>22</real>
</dict>
<dict>
<key>color</key>
<string>gray</string>
<key>height</key>
<real>20</real>
<key>length</key>
<real>85</real>
<key>level</key>
<real>2</real>
<key>name</key>
<string>shark</string>
<key>note</key>
<string>hungry!</string>
<key>width</key>
<real>35</real>
</dict>
</array>
</plist>
我可以加载数据并打印整个列表,如下所示:
NSString *path = [[NSBundle mainBundle]pathForResource:@"testdata" ofType:@"plist"];
NSMutableArray *foodsList = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSLog(@"Did Load - FoodsList = %@", foodsList);
但是当我把它加载到UITableView中以便我可以有一个名单列表时,我无法让它工作。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = [[testdata objectAtIndex:indexPath.row]objectForKey:@"name"];
return cell;
}
NSMutableArray * keyValues = testdata [key]; line在Dictionary和Array类型之间失败。
我做错了什么?
谢谢,
丹
答案 0 :(得分:1)
您没有在cellForRowAtIndexPath
内的任何位置设置文字:
设置单元格标签文本
cell.textLabel.text = @"Hello World";
答案 1 :(得分:1)
问题在于如何构建plist中的数据,或者尝试读取其内容的方式。
首先,您定义了4个字典数组,其中包含7个键(颜色,高度,长度,级别,名称,注释,宽度)以及各自的值。
因此,对于每一行(总共4行),您可以通过获取属性字典来访问它的键/值:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
NSDictionary* rowProperties = [testdata objectAtIndex:indexPath.row];
NSString* color = [rowProperties objectForKey:@"color"];
NSNumber* height = [rowProperties objectForKey:@"height"];
...
}
如果您需要以其他方式访问数据,也许您可以更改de plist数据以适应这种方式。
答案 2 :(得分:1)
试试这个:
- (NSArray *)plist
{
if (plist == nil)
{
// Get the URL of the property list
NSURL *url = [[NSBundle mainBundle] URLForResource:@"PropertyList" withExtension:@"plist"];
// Load the contents of the property list in to a NSData object
NSData *plistData = [NSData dataWithContentsOfURL:url];
NSPropertyListFormat propertyListFormat;
NSError *error;
// Create an immutable property list from the data
_plist = (NSArray *)[NSPropertyListSerialization propertyListWithData:plistData options:NSPropertyListImmutable format:&propertyListFormat error:&error];
// Check for error
if (error)
{
#ifdef DEBUG
NSLog(@"[Property List] %@", [error description]);
#endif
// Return nil if there is one
return nil;
}
}
return plist;
}
- (id)propertyListKeyAtIndex:(NSInteger)aKeyIndex inDictionaryAtIndex:(NSInteger)aDictionaryIndex
{
// Load the dictionary
NSDictionary * __weak dictionary = (NSDictionary *)self.plist[aDictionaryIndex];
// Load all of the keys
NSArray * __weak keyArray = [dictionary allKeys];
// Return with the key
id key = keyArray[aKeyIndex];
return key;
}
- (id)valueForPropertyListKey:(NSString *)aKey inDictionaryAtIndex:(NSInteger)aDictionaryIndex
{
// Load the dictionary
NSDictionary * __weak dictionary = (NSDictionary *)self.plist[aDictionaryIndex];
// Get the value of the key from the dictionary
id object = dictionary[aKey];
// Return with the value
return object;
}
OR
NSString * __weak key = (NSString *)[(NSDictionary *)self.plist[0] allKeys][0];
id value = self.plist[0][key];
答案 3 :(得分:1)
尝试此操作,它将根据表视图中的行号加载相应的单元格。该行号将用作包含词典的数组中的索引。
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
NSMutableDictionary *rowProperties = self.keyValues[indexPath.row]; // keyValues is an array holding your dictionaries from the plist
NSString *color = rowProperties[@"color"];
cell.textLabel.text = color;
// continue the same process for all of your items in your dictionary
return cell;
}
答案 4 :(得分:0)
它在每个函数中放入了NSLog语句,我只看到了七个中的两个响应,所以这让我开始追踪为什么没有调用UITableViewCell。
在行数的初始化中,我有一个指向Nil值的数组错误的var名称,所以实际上我说的是零行,所以没有必要继续进行。
在下面的示例中,“testdata”已替换为“namedata”,其具有NIL值。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger *Count = [@(testdata.count) integerValue];
return Count;
}
在我再次打扰你之前,我必须更加小心地检查我的工作。
我感谢你们每个人的帮助......我将研究你们为什么以你们的方式做出回应......总是要学习......
丹