如何从plist中检索数据

时间:2013-04-08 19:04:26

标签: ios nsarray plist nsdictionary

嗨,我有一个以下格式enter image description here

的plist

我想根据他们的类别ID对这些书进行排序。我有一个数组“TotalCategory”与所有类别ID(例如:cat1,cat2 ..),我想打开下面的plist并检查每本书及其类别ID是否匹配。如果我有的类别ID是与给定书籍的类别ID匹配然后我想将该类别ID和书籍ID(bid)添加到新词典中。是否可能?

NSDictionary *booksPlist = [[NSDictionary alloc] initWithContentsOfFile:path];
NSArray *categoryId=[[booksPlist objectForKey:@"catlist"]valueForKey:@"cid"];
NSLog(@"%@",categoryId);

// getting category list

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *allBooksPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Allbooks.plist"];
NSDictionary *allBookPlist=[[NSDictionary alloc]initWithContentsOfFile:allBooksPath];

NSArray *bookid=[[allBookPlist objectForKey:@"listbook"]valueForKey:@"bid"];
NSString *s=[[[allBookPlist objectForKey:@"listbook"]objectForKey:@"cate" ]valueForKey:@"categories"];  //// this line shows exception


 NSLog(@"%@",s); 

///我想要这个::: 我想检查我的类别ID和每本书中的类别ID是否匹配,然后检索该书的ID(出价)

1 个答案:

答案 0 :(得分:1)

您的请求不是很清楚,但我发现您的代码存在一些问题。

首先,不要将-objectForKey: NSDictionary方法与非正式协议valueForKey:的{​​{1}}方法混淆。

后者用于NSKeyValueCoding访问,最好不要在不知情的情况下混合它们。它可能有效,但在某些情况下也可能爆炸。 坚持KVC或更好,您可以使用现代订阅语法

objectForKey:

相当于

[dict objectForKey:@"whatever"];

那就是说,让我们面对你的具体问题。 首先dict[@"whatever"]; 是一个数组,所以你不能做

listbook

首先需要访问数组元素,所以在现代语法中你应该

[[allBookPlist objectForKey:@"listbook"]valueForKey:@"bid"];

获取第一个元素的NSString * bookId = allBookPlist[@"listbook"][0][@"bid"]; 。如果你想收集它们,只需迭代数组

bid

可以使用类似的方法从每本书中获取类别。