首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >核心数据:删除WHERE

核心数据:删除WHERE
EN

Stack Overflow用户
提问于 2011-11-17 04:45:02
回答 3查看 6K关注 0票数 19

我知道如何使用NSPredicate来执行SQL SELECT-like操作。我怎样才能执行像DELETE WHERE这样的东西?我必须为每个获取的对象调用[NSManagedObjectContext deleteObject]吗?谢谢

代码语言:javascript
复制
NSError *error;

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:TASK_ENTITY inManagedObjectContext:managedObjectContext]];

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"label LIKE  %@", label];
[request setPredicate:predicate];

NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];

[managedObjectContext deleteObject:[array objectAtIndex:0]];
EN

回答 3

Stack Overflow用户

发布于 2011-12-12 13:25:48

我相信循环遍历返回的数组并调用[NSManagedObjectContext deleteObject:]是“正确的”/idiomatic方法。这看起来似乎很低效,但请记住,fetch命令实际上并不获取对象的数据,而deleteObject:方法只是将对象标记为删除,在发送[NSManagedObjectContext save:]时会应用该方法。由于不知道核心数据的内部结构,我不能告诉你它是否像DELETE WHERE查询一样高效(大概核心数据在内存中有来自fetch的索引主键,并使用这些主键),但根据我分析核心数据应用程序的经验,它并不比保存新的或更新的对象慢很多。

票数 6
EN

Stack Overflow用户

发布于 2015-03-30 19:00:31

代码语言:javascript
复制
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:TASK_ENTITY inManagedObjectContext:managedObjectContext];

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"label LIKE%@", label.text]];

NSError* error = nil;

NSArray* results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

if(![results count]==0)
{
   [managedObjectContext deleteObject:[results objectAtIndex:0]];
}
if (![managedObjectContext save:&error]) {
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
票数 0
EN

Stack Overflow用户

发布于 2016-04-28 17:46:06

我刚刚尝试了一下,它是成功的:

代码语言:javascript
复制
NSError *error = nil;
NSFetchRequest* fetchrequest = [NSFetchRequest fetchRequestWithEntityName:@"EntityName"];
[request setPredicate:[NSPredicate predicateWithFormat:@"attribute == %@", variable]];
NSArray *deleteArray = [context executeFetchRequest:fetchrequest error:&error];

if (deleteArray != nil)
{
    for (NSManagedObject* object in deleteArray)
    {
        [context deleteObject:object];

        //Reload/refresh table or whatever view..
    }

    [context save:&error];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8158423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档