ios - 如何使用 NSPredicate 从 CoreData 中删除选定数量的行?

标签 ios objective-c core-data

我想从 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/

相关文章:

ios - facebook 登录多个用户

iphone - 在一台设备上为多个用户登录 iOS 应用程序中的 Facebook

objective-c - 归档多个项目

ios - 核心数据未保存到 TableView

swift - NSPersistentCloudKitContainer 和持久历史跟踪

iOS,为什么当我修改从 fetchedResult 创建的 MutableArray 的内容时它会自动更新自身?

ios - iOS-SKProductsResponse返回空产品数组

iphone - 如何处理动态 UITableView 中对 UITextFields 的引用 (iPhone)

objective-c - 如何获得协议(protocol)定义的函数列表?

ios - 在 XCTestCase 中使用 UIImage imageNamed