我是Core Data中的一员,我设计了一个基于导航的应用程序,我使用的一些数据是在运行时创建的(来自URL通过JSON)。我花了几天时间搜索了一些教程,但还没有意识到如何将传入的JSON数据保存到我的核心数据模型中的实体(或事件?)中。我获取DetailViewController
类中的数据,我需要将此数据保存到Core Data(我已经准备了一个具有7个属性的实体)。任何人都可以帮忙吗?(如果你知道一个很好的教程或示例代码,我会很高兴)
编辑这可能有点具体,但我真的遇到麻烦,需要一些帮助。
我的数据来自一种安静的服务器(我用PHP编写),首先是用户输入他/她的登录信息(我之前保存到服务器上的数据库),当响应数据到来时我将使用不同的不同视图中的元素(例如,user_id
将用于视图,buttonData
等用于其他视图。我的问题是,如何将JSON数据保存到我的核心数据模型中(目前有树实体)。提前致谢
注意:我很喜欢周围但是找不到像我这样的应用程序的任何答案和教程
答案 0 :(得分:11)
最好的方法是创建与JSON结构相对应的实体。最简单的是当每个JSON对象成为实体时,数组成为实体数组。但是,要合理,并且不要为JSON子对象引入太多的过度杀伤,这些子对象基本上是其超级对象的一部分。
创建实体后,您可以从解析和翻译开始。使用一些JSON框架(从iOS5开始,有一个来自Apple)并将JSON字符串解析为对象树,其中根项是NSArray或NSDictionary,子元素是NSArray,NSDictionary,NSNumber,NSString或NSNull。
在迭代循环中逐个遍历它们,并根据核心数据实体属性分配相应的值。您可以在此处使用NSKeyValueCoding,并避免过多手动映射属性名称。如果您的JSON属性与实体属性的名称相同,那么您将能够遍历所有字典元素并将它们解析为同名属性。
我在类似情况下的解析代码如下:
NSDictionary *parsedFeed = /* your way to get a dictionary */;
for (NSString *key in parsedFeed) {
id value = [parsedFeed objectForKey:key];
// Don't assign NSNull, it will break assignments to NSString, etc.
if (value && [value isKindOfClass:[NSNull class]])
value = nil;
@try {
[yourCreatedEntity setValue:value forKey:property];
} @catch (NSException *exception) {
// Exception means such attribute is not defined in the class or some other error.
}
}
此代码将在微不足道的情况下工作,但是,根据您的需要,它可能需要扩展:
我不认为在这个答案的范围内深入研究这些更高级的问题是合理的,因为它会过多地扩展它。
答案 1 :(得分:2)
答案 2 :(得分:1)
我建议您使用此库:https://github.com/TouchCode/TouchJSON 然后,如果你想让工厂解析json并提供你的代码数据,你可以使用选择器调用方法来填充你的所有属性。
答案 3 :(得分:0)
有可能您的JSON数据被转换为NSDictionary或NSArray(或两者的某种组合)。只需从JSON结构中提取键/值,然后将它们添加到您的实体类中。