squ*_*rog 14 iphone json core-data ios
将我的Core Data架构与提供JSON的远程API同步的最佳方法是什么?目前,我正在循环查看JSON响应中的每个字典,检查核心数据以查看API ID是否存在.
这很好用,但现在要做的就是删除服务器上没有的任何本地对象.以下是我的JSON数据示例:
[
{
"id":1234,
"name":"My first object",
"description":"This is a long string with lots of information"
},
{
"id":1235,
"name":"My second object",
"description":"This is a long string with lots of information"
}
]
Run Code Online (Sandbox Code Playgroud)
目前,我能想到实现这一目标的唯一方法如下:
NSArray *jsonData = // Convert json data to array using NSJSONSerialization
NSInteger fetchedCount = _fetchedResultsController.fetchedObjects.count;
if (fetchedCount != jsonData.count) {
for (int i = 0; i < fetchedCount; i++) {
NSManagedObject *object = [_fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForItem:i
inSection:0]];
NSNumber *idNumber = object.apiID;
BOOL shouldDelete = YES;
for (NSDictionary *jsonDict in jsonData) {
if ([jsonDict objectForKey:@"id"] == idNumber) {
shouldDelete = NO;
}
}
if (shouldDelete) {
// Delete object.
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为如果JSON数组包含很多对象,那将是非常低效的.
Lor*_*o B 21
这可能没问题,但我认为你应该应用Apple doc中建议的Find-or-Create模式.请参阅此处以获得有效导入数据的深入解释(特别是请参阅有效地实现查找或创建).
总体思路很简单.有对象的两个数组(一个你从核心数据检索和你从服务中检索一个)排序(由apiID
和id
RESP).
显然,如果有大量数据,我真的建议在后台执行操作.请记住,每个线程都需要依赖它NSManagedObjectContext
.否则,请利用iOS 5 API提供的新队列机制.
为了完整起见,我还建议阅读RayWenderlich教程如何使用Web服务第1部分和第2部分同步核心数据.这非常有趣.
希望有所帮助.
归档时间: |
|
查看次数: |
6003 次 |
最近记录: |