What 迈克·韦勒写的是对的。我将稍微扩展一下答案。
首先你需要创建一个NSFetchRequest
像下面这样:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Selection" inManagedObjectContext:context]];
然后您必须为该请求设置谓词,如下所示:
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"content == %@ AND page_id == %@ AND book_id == %@", contentVal, pageVal, bookVal]];
where
NSString* contentVal = @"test";
NSNumber* pageVal = [NSNumber numberWithInt:5];
NSString* bookVal = @"1331313";
我在用着%@
因为我假设您使用的是对象而不是标量值。
现在,您在前一个请求的上下文中执行提取:
NSError* error = nil;
NSArray* results = [context executeFetchRequest:fetchRequest error:&error];
results
包含与该谓词匹配的所有托管对象。
最后,您可以抓取对象并对其进行删除。
[context deleteObject:currentObj];
完成后,您需要根据文档保存上下文。
正如在保存上下文之前新对象不会保存到存储中一样,在保存上下文之前不会将已删除的对象从存储中删除。
Hence
NSError* error = nil;
[context save:&error];
注意save
方法返回一个布尔值。因此,您可以使用如下方法或向用户显示警报。来源NSManagedObjectContext 保存错误 http://matthewmorey.com/nsmanagedobjectcontext-save-error/.
NSError *error = nil;
if ([context save:&error] == NO) {
NSAssert(NO, @"Save should not fail\n%@", [error localizedDescription]);
abort();
}