Преобразование и хранение данных JSON в основные данные iOS
В основном я работаю над приложением, которое позволяет пользователям отслеживать свои телешоу. Пользователь может нажать на свое телешоу, чтобы получить сезон и разбивку эпизодов.
Чтобы добиться этого, я пытаюсь собрать данные JSON из этого API, а затем сохранить данные в основных данных. Вызов API заключается в следующем: http://api.trakt.tv/show/summary.json/36590b30dc7d0db9ebd3153b1a989e5d/arrow/1
Я могу успешно сохранить значения: title, year, url, first_aired и т. Д. Но я не могу понять, как сохранить информацию о сезоне и эпизоде в моих основных данных (расположенных примерно на полпути вниз по вызову JSON API)
Я включил ссылку на скриншот того, как я изложил свою основную модель данных: http://i546.photobucket.com/albums/hh427/camcham/ScreenShot2013-10-17at34449AM.png
Код ниже показывает, как я сейчас пытаюсь сохранить данные JSON в свои основные данные (используя MagicalRecords).
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
Show *showp = [Show MR_findFirstByAttribute:@"sID" withValue:showID inContext:localContext];
if (![showp.sID isEqualToString:showID])
{
//Create New Show in current thread
Show *showContext = [Show MR_createInContext:localContext];
showContext.title = showTitle;
showContext.poster = showPoster;
showContext.year = showYear;
showContext.sID = showID;
//code above this comment correctly adds right JSON info to core data and i can access and display it properly
В следующей части моего кода я попытался преобразовать NSArray в NSSet, поскольку мои отношения "сезонов" относятся к типу NSSet, однако я считаю, что данные JSON - это NSArray. Я получаю следующую ошибку: * Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "-[__NSCFNumber managedObjectContext]: нераспознанный селектор, отправленный экземпляру 0xa22a680"
NSArray *show = [(NSSet *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"season"];
showContext.seasons = [NSSet setWithArray:show];
Код ниже не работает, как задумано. Например, episode.title хранит название каждого отдельного эпизода, а не только один заголовок для конкретного эпизода.
Season *season = [Season MR_createInContext:localContext];
season.seasonNumber = [(NSDictionary *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"season"];
season.episodes = [(NSDictionary *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"episodes"];
Episode *episode = [Episode MR_createInContext:localContext];
episode.title = [[(NSDictionary *)[season.episodes objectForKey:@"seasons"] valueForKey:@"episodes"] valueForKey:@"title"];
episode.overview = [[(NSDictionary *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"episodes"] valueForKey:@"overview"];
Подводя итоги, я хотел бы, чтобы кто-то продемонстрировал правильный способ хранения сезонов и эпизодов из моего JSON API, чтобы затем использовать эти данные в своем приложении!
1 ответ
Удаление приведения к (NSSet *) должно исправить ошибку.
NSArray *show = [[JSONEvents objectForKey:@"seasons"] valueForKey:@"season"];
showContext.seasons = [NSSet setWithArray:show];
вместо
NSArray *show = [(NSSet *)[JSONEvents objectForKey:@"seasons"] valueForKey:@"season"];
showContext.seasons = [NSSet setWithArray:show];