将 JSON 数据转换并存储为 iOS Core Data
Posted
技术标签:
【中文标题】将 JSON 数据转换并存储为 iOS Core Data【英文标题】:Converting and storing JSON data into iOS Core Data 【发布时间】:2013-10-16 17:07:10 【问题描述】:基本上,我正在开发一个允许用户跟踪他们的电视节目的应用程序。用户可以点击他们的电视节目以获取季节和剧集细分。
为了实现这一点,我试图从这个 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,因为我的“季节”关系是 NSSet 类型,但是我相信 JSON 数据是 NSArray。我收到以下错误:* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFNumber managedObjectContext]: unrecognized selector sent to instance 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 季和 1 集。 我正在尝试存储多个季节和剧集,但上面的代码将所有剧集存储在一起,而不是新剧集的单独对象。如何更改我的代码以正确存储季节和剧集数据? 【参考方案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];
【讨论】:
以上是关于将 JSON 数据转换并存储为 iOS Core Data的主要内容,如果未能解决你的问题,请参考以下文章
将 iOS 应用从 NSCoding 转换为 Core Data
ASP.NET Core MVC - 将 HTML 表转换为 json 并使用 ajax 发送到控制器