gpt4 book ai didi

ios - 核心数据 : How to delete objects that are not in new data

转载 作者:行者123 更新时间:2023-12-01 17:18:07 25 4
gpt4 key购买 nike

我从针对 iOS5 和 iOS7 的斯坦福讲座系列中了解了 Core Data,并且我已经使用 Core Data 成功制作了 3 个不同的应用程序。但是我总是有一个关于核心数据无法解决的问题:

如果核心数据中的对象不存在于新数据中,有没有办法删除这些对象?

例如,假设我正在开发一个博物馆应用程序。如果 iPhone 中的一些旧的 Core-Data 对象在从 Internet 接收的新数据中不存在,则意味着应用程序不再需要这些旧对象,应将其删除。你怎么能删除这些?更新和创建新对象很容易,但使用 Core Data,通过消除过程删除对象是不可能的!

我可以删除所有对象并插入新对象,但每次只有少数对象被修改、更改或删除。因此,延迟所有内容并再次插入所有内容并不是一个有效的解决方案,尤其是考虑到您每次要获取大约 200 个对象。

最佳答案

假设

  • 您的 Core Data 实体有一个属性“unique_id”,可以唯一标识每个实体对象,和
  • 服务器响应存储为字典数组(例如来自 JSON 响应)其中每个字典还包含“unique_id”,

然后您可以执行以下操作:首先,从来自服务器的新对象:

NSArray *uniqueIds = [serverResponse valueForKey:@"unique_id"];

然后获取所有 ID 不在此数组中的对象。这可以是完成单个获取请求:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"YourEntity"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT unique_id IN %@", uniqueIds];
request.predicate = predicate;
NSError *error;
NSArray *outdatedObjects = [context executeFetchRequest:request error:&error];
if (outdatedObjects == nil) {
// handle error ...
}

最后,删除过时的对象:

for (YourEntity *obj in outdatedObjects) {
[context deleteObject:obj];
}
if (![context save:&error]) {
// handle error ...
}

关于ios - 核心数据 : How to delete objects that are not in new data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24492959/

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