我想从 CoreData 表中删除选定的项目列表:一些具有特定 namesToDelete
的人:
NSError* error = nil;
NSFetchRequest* request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Person"
inManagedObjectContext:managedObjectContext]];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"NOT (name IN %@)", namesToDelete];
[request setPredicate:predicate];
NSArray* deleteArray = [managedObjectContext executeFetchRequest:request error:&error];
if (error == nil)
{
for (NSManagedObject* object in deleteArray)
{
[managedObjectContext deleteObject:object];
}
[managedObjectContext save:&error];
//### Error handling.
}
else
{
//### Error handling.
}
这可行,但这是在 CoreData 中执行此操作的最简单/最短的方法吗?
最佳答案
关于最好的修剪是这样的:
NSError* error = nil;
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
[request setPredicate:[NSPredicate predicateWithFormat:@"NOT (name IN %@)", namesToDelete]];
NSArray* deleteArray = [managedObjectContext executeFetchRequest:request error:&error];
if (deleteArray != nil)
{
for (NSManagedObject* object in deleteArray)
{
[managedObjectContext deleteObject:object];
}
[managedObjectContext save:&error];
//### Error handling.
}
else
{
//### Error handling.
}
另请注意,您检查数组是否作为成功标准返回,而不是检查 nil
中的错误。同样,对于 save:
,您应该检查返回的 BOOL
。
关于ios - 如何使用 NSPredicate 从 CoreData 中删除选定数量的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18580549/