gpt4 book ai didi

ios - 如何将来自 Web 服务的数据与 Core Data 同步?

转载 作者:技术小花猫 更新时间:2023-10-29 10:49:18 25 4
gpt4 key购买 nike

我正在尝试以一种简单的方式从网络服务同步我的数据。我使用 AFNetworking 下载我的数据,并在每个对象上使用唯一标识符,我想插入、删除或更新该数据。

问题在于,对于 Core Data,您实际上必须在 NSObjectManagedContext 中插入对象以实例化 NSManagedObjects。像这样:

MyModel *model = (MyModel *)[NSEntityDescription insertNewObjectForEntityForName:@"MyModel" inManagedObjectContext:moc];
model.value = [jsonDict objectForKey:@"value"];

因此,当我从 Web 服务获取数据时,我会立即将它们插入到 Core Data 中。所以并没有真正的同步:我只是事先删除所有内容,然后插入从我的网络服务返回的内容。

我想有更好的方法来做这件事,但我不知道怎么做。有帮助吗?

最佳答案

您正在运行经典的插入/更新/删除范例。

答案是,这取决于。如果您获得了一大块 json 数据,那么您可以使用 KVC 从该 block 中提取唯一 ID,并针对您的上下文进行提取以找出已经存在的内容。从那里开始,它是对数据 block 的简单循环,根据需要插入和更新。

如果您没有像那样在一个很好的 block 中获取数据,那么您可能需要为每条记录执行一次提取以确定它是插入还是更新。那要贵得多,应该避免。建议事先批量获取。

删除与获取/更新一样昂贵,因为无论如何您都需要获取对象以删除它们,所以您最好适本地处理更新。

更新

是的,有一种从核心数据对象构建字典的有效方法。从 Core Data 中获取现有对象数组后,您可以使用以下命令将其转换为字典:

NSArray *array = ...; //Results from Core Data fetch
NSDictionary *objectMap = [NSDictionary dictionaryWithObjects:array forKeys:[array valueForKey:@"identifier"]];

这假设您的核心数据实体中有一个名为 identifier 的属性。根据需要更改名称。

通过这一行代码,您现在可以在 NSDictionary 中拥有所有现有对象,然后您可以在遍历 JSON 时查找这些对象。

关于ios - 如何将来自 Web 服务的数据与 Core Data 同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com