2013-10-08 20 views
0

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

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

任何人都可以提出任何可观的库来处理这个反序列化/序列化从/到JSON < - > NSManagedObject。

回答

1

我使用RestKit这个目的,这是很容易使用

+0

感谢您的建议。我会查看它是否符合我的要求。目前我使用JAGPropertyConverter的修改版本,但在我的情况下它并不是很好。 – Anand

+0

更新:开发工作正在进行,以便进行重大更改并实施RestKit。我设法通过修改JAGPropertyConvert库来解决这个问题。无论如何感谢您的回答。可能在下一个项目中我会使用它。 – Anand

0

@Eugen

RestKit看起来很复杂。我不得不解析相当复杂的JSON并保存在Core数据中。此外,服务器上的数据可能会更改,并且在接下来的解析中,本地Core数据值需要更新,而不是插入新的。

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

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

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

谢谢。

0

关于RestKit:我喜欢做Web服务调用如下所述:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

至于你deserialisation问题:你可能想通过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的结构不同,则可以在使用它来填充NSManagedOject之前操作NSMutableDictionary。