Mic*_*ith 11 web-services core-data ios
我正在尝试以简单的方式从Web服务同步我的数据.我使用AFNetworking下载数据,并在每个对象上使用唯一标识符,我想插入,删除或更新该数据.
问题是,使用Core Data,您必须在NSObjectManagedContext中实际插入对象以实例化NSManagedObjects.像这样:
MyModel *model = (MyModel *)[NSEntityDescription insertNewObjectForEntityForName:@"MyModel" inManagedObjectContext:moc];
model.value = [jsonDict objectForKey:@"value"];
Run Code Online (Sandbox Code Playgroud)
因此,当我从Web服务获取数据时,我会立即将它们插入Core Data中.因此,没有真正的同步:我只是事先删除所有内容,然后插入从我的Web服务返回的内容.
我想有更好的方法可以做到这一点,但我不知道怎么做.有帮助吗?
Mar*_*rra 12
您正在遇到经典的插入/更新/删除范例.
答案是,这取决于.如果您获得了一大块json数据,那么您可以使用KVC从该块中提取唯一ID并对您的上下文进行提取以找出已存在的内容.从那里开始,它是对数据块的简单循环,适当地插入和更新.
如果你没有像这样在一个很好的块中获取数据,那么你可能需要对每个记录进行一次获取以确定它是插入还是更新.这要贵得多,应该避免.建议手动批量提取.
删除与获取/更新一样昂贵,因为您需要获取对象以删除它们,因此您也可以正确地处理更新.
是的,有一种从Core Data对象构建字典的有效方法.从Core Data获取现有对象数组后,可以将其转换为字典:
NSArray *array = ...; //Results from Core Data fetch
NSDictionary *objectMap = [NSDictionary dictionaryWithObjects:array forKeys:[array valueForKey:@"identifier"]];
Run Code Online (Sandbox Code Playgroud)
这假设您identifier在Core Data实体中调用了一个属性.根据需要更改名称.
使用这一行代码,您现在可以拥有所有现有对象,NSDictionary然后在行走JSON时可以查看它们.
| 归档时间: |
|
| 查看次数: |
8162 次 |
| 最近记录: |