Как я могу получить данные из plist
Привет у меня есть листинг следующего формата
Я хочу отсортировать эти книги по их категориям. У меня есть массив "TotalCategory" со всеми идентификаторами категорий (например, cat1,cat2..), я хочу открыть приведенный ниже список и проверить с каждой книгой и ее идентификатором категории, соответствует ли он или нет. Если идентификатор категории у меня есть, сопоставление с идентификатором категории данной книги, затем я хочу добавить этот идентификатор категории и идентификатор книги (ставку) в новый словарь. Возможно ли это?
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);
/// Я ХОЧУ ЭТО::: Я хочу проверить идентификатор категории со мной и идентификаторы категории внутри каждой книги, если она совпадает, затем получить идентификатор этой книги (ставка), вот и все
1 ответ
Не совсем понятно, каков ваш запрос, но я вижу несколько проблем с вашим кодом.
Прежде всего, не путайте -objectForKey:
метод NSDictionary
с valueForKey:
метод неформального протокола NSKeyValueCoding
,
Последний используется для KVC
доступ и лучше не смешивать их, не зная об этом. Это может работать, но может также взорваться при некоторых обстоятельствах. Придерживаться objectForKey:
или лучше вы можете использовать современный подписной синтаксис
[dict objectForKey:@"whatever"];
эквивалентно
dict[@"whatever"];
Тем не менее, давайте столкнемся с вашей конкретной проблемой. Прежде всего listbook
это массив, так что вы не можете сделать
[[allBookPlist objectForKey:@"listbook"]valueForKey:@"bid"];
Сначала вам нужно получить доступ к элементу массива, поэтому в современном синтаксисе вы должны сделать
NSString * bookId = allBookPlist[@"listbook"][0][@"bid"];
чтобы получить bid
первого элемента. Если вы хотите собрать их, просто переберите массив
NSArray * books = allBookPlist[@"listbook"];
NSMutableArray * bookIds = [@[] mutableCopy]
for (NSDictionary * book in books) {
[bookIds addObject:book[@"bid"]];
}
Аналогичный подход можно использовать для получения категорий из каждой книги.