2013-10-16 117 views
1

基本上我正在开发一个应用程序以允许用户跟踪他们的电视节目。用户可以点击他们的电视节目来获得季节和情节分解。将JSON数据转换并存储到iOS核心数据中

为了实现这一点,我试图从这个API中收集JSON数据,然后将数据存储到核心数据中。 API调用是这样的: http://api.trakt.tv/show/summary.json/36590b30dc7d0db9ebd3153b1a989e5d/arrow/1

我可以成功地存储的值:标题,年份,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的电视季节和情节正确的方式爱,这样的话,我可以在我的应用程序利用这些数据!

+0

你收到多个节目和多发季节,因为它看起来像你只创建1个赛季1个插曲。 – Kevin

+0

我试图存储多个季节和剧集,但上面的代码将所有剧集存储在一起,而不是单独的新剧集。如何更改我的代码以正确存储季节和情节数据? – user2390918

回答

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]; 
+0

这确实修复了错误,谢谢! – user2390918