0

我从需要使用核心数据在本地保存的 Web 服务获取 JSON。这是在特定时间间隔后执行的同步操作的一部分。我需要首先将 JSON 转换为 NSManagedObject 并检查它是否已经保存在本地,然后只需更新现有的,否则插入新的 NSManagedObject。

一个 NSManagedObject 被检查,无论它是否已经保存。也可以与其他 NSManagedObjects 有关系(这也需要是谓词的一部分)

任何人都可以建议任何相当大的库来处理来自/到 JSON <-> NSManagedObject 的反序列化/序列化。

4

3 回答 3

1

我为此目的使用RestKit,它很容易使用

于 2013-10-08T20:02:23.980 回答
0

关于 RestKit:我更喜欢按照此处所述进行 Web 服务调用:https ://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

至于您的反序列化问题:您可能希望将 Web 服务检索到的 NSData 对象转换为如下 JSON 结构:


NSMutableDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers  error:nil];

然后,您可以使用https://gist.github.com/pkclsoft/4958148来填充 NSManagedObject,如下所示:


Entity *entity = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:[self managedObjectContext]];
[entity populateFromDictionary:dict];

如果 json 结构和 NSManagedObject 的结构不同,您可以在使用 NSMutableDictionary 填充 NSManagedOject 之前对其进行操作。

于 2014-05-09T11:55:24.843 回答
0

@欧根

RestKit 似乎很复杂。我必须解析相当复杂的 JSON 并保存在核心数据中。服务器上的数据也可以更改,并且在接下来解析本地核心数据值时需要更新而不是插入新的。

但是在 Web 服务调用中,我需要通过设置 HTTP 标头 user=access_token、password=mypassword 来进行身份验证。

RestKit 中只有一种方法可以直接请求和映射到 managedObject,并且只有该方法在发送请求时无法正常工作。我得到 403 响应。与 NSManagedObject 无关的所有其他方法都会在响应中进行身份验证并获得良好的 JSON。

我浪费了很多时间试图让 RESTKIT 工作,现在我觉得我应该尝试一些简单的方法。任何人都可以提出任何好的库或任何其他建议。

谢谢你。

于 2013-10-31T12:37:44.513 回答