sam*_*mir 10 core-data objective-c nsmanagedobject ios
我的核心数据模型中有一个实体,如下所示:
@interface Selection : NSManagedObject
@property (nonatomic, retain) NSString * book_id;
@property (nonatomic, retain) NSString * contenu;
@property (nonatomic, retain) NSNumber * page_id;
@property (nonatomic, retain) NSNumber * nbrOfOccurences;
@property (nonatomic, retain) NSString * next;
@property (nonatomic, retain) NSString * previous;
Run Code Online (Sandbox Code Playgroud)
我创建了很多Selections并将它们保存在Core Data中,现在我想删除一些带有一些标准的选择.例如,Selection如果匹配以下内容,我想删除一个对象:
content = test
page_id = 5
book_id = 1331313
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
Lor*_*o B 34
什么迈克·韦勒写道是正确的.我会稍微扩展一下答案.
首先,您需要创建NSFetchRequest如下所示:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Selection" inManagedObjectContext:context]];
Run Code Online (Sandbox Code Playgroud)
然后,您必须为该请求设置谓词,如下所示:
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"content == %@ AND page_id == %@ AND book_id == %@", contentVal, pageVal, bookVal]];
Run Code Online (Sandbox Code Playgroud)
哪里
NSString* contentVal = @"test";
NSNumber* pageVal = [NSNumber numberWithInt:5];
NSString* bookVal = @"1331313";
Run Code Online (Sandbox Code Playgroud)
我正在使用,%@因为我假设你正在使用对象而不是标量值.
现在,您使用上一个请求在上下文中执行提取:
NSError* error = nil;
NSArray* results = [context executeFetchRequest:fetchRequest error:&error];
Run Code Online (Sandbox Code Playgroud)
results 包含与该谓词匹配的所有托管对象.
最后,您可以抓取对象并对其进行删除.
[context deleteObject:currentObj];
Run Code Online (Sandbox Code Playgroud)
完成后,您需要根据文档保存上下文.
正如在保存上下文之前未将新对象保存到存储中一样,在保存上下文之前,不会从存储中删除已删除的对象.
于是
NSError* error = nil;
[context save:&error];
Run Code Online (Sandbox Code Playgroud)
请注意,该save方法返回bool值.因此,您可以使用如下方法或向用户显示警报.源NSManagedObjectContext保存错误.
NSError *error = nil;
if ([context save:&error] == NO) {
NSAssert(NO, @"Save should not fail\n%@", [error localizedDescription]);
abort();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15199 次 |
| 最近记录: |