嗨,我有一个以下格式
的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(出价)
答案 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
可以使用类似的方法从每本书中获取类别。