Преобразование и хранение данных 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];
Другие вопросы по тегам