将JSON数据转换并存储到iOS Core Data中

时间:2013-10-16 17:07:11

标签: ios json api core-data magicalrecord

基本上我正在开发一款应用程序,允许用户跟踪他们的电视节目。用户可以点击他们的电视节目来获得季节和剧集细分。

为实现这一目标,我尝试从此API收集JSON数据,然后将数据存储到核心数据中。 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,因为我的'season'关系是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 个答案:

答案 0 :(得分: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];