我从iOS5和iOS7的Stanford Lecture系列中学到了Core Data,并且我使用Core Data成功制作了3个不同的应用程序.但我总是遇到一个我无法解决的关于核心数据的问题:
有没有办法可以删除Core数据中的对象,如果新数据中没有这些对象?
例如,假设我正在开发一个博物馆应用程序.如果iPhone中的一些旧的Core-Data对象不存在于从Internet接收的新数据中,则意味着应用程序中不再需要那些旧对象,应将其删除.你怎么能删除这些?更新和创建新对象很简单,但使用Core Data,删除具有消除过程的对象是不可能的!
我可以删除所有对象并插入新对象,但每次只修改,更改或删除一些对象.所以延迟一切并再次插入所有内容并不是一个有效的解决方案,特别是考虑到你每次都要获取大约200个对象.
假如说
然后,您可以执行以下操作:首先,从服务器的新对象创建一个包含所有唯一ID的数组:
NSArray *uniqueIds = [serverResponse valueForKey:@"unique_id"];
Run Code Online (Sandbox Code Playgroud)
然后使用不在此数组中的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 ...
}
Run Code Online (Sandbox Code Playgroud)
最后,删除过时的对象:
for (YourEntity *obj in outdatedObjects) {
[context deleteObject:obj];
}
if (![context save:&error]) {
// handle error ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |