删除核心数据中的对象 [英] Delete an object in core data

查看:152
本文介绍了删除核心数据中的对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个实体在我的核心数据模型像这样:

  @interface选择: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;

我创建了许多 Selection 他们在核心数据,现在我想删除一些选择与一些标准。例如,如果符合以下条件,我想删除 Selection 对象:

  content = test 
page_id = 5
book_id = 1331313

我可以做这个?

解决方案

Mike Weller 写的是正确的。



首先,您需要创建一个 NSFetchRequest ,如下所示:

  NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:[NSEntityDescription entityForName:@SelectioninManagedObjectContext:context]];

然后您必须为该请求设置谓词,如下所示:



[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@content ==%@ AND page_id ==%@ AND book_id ==%@,contentVal,pageVal, bookVal]];

其中

  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]; 

完成后,您需要按照文档保存上下文。


正如在保存上下文之前一个新对象不保存到商店中一样,在保存上下文之前不会从商店中删除已删除的对象。


因此

  NSError * error = nil; 
[context save:& error];

请注意, save 方法返回一个bool值。因此,您可以使用类似以下的方法或向用户显示警报。来源 NSManagedObjectContext保存错误

  NSError * error = nil; 
if([context save:& error] == NO){
NSAssert(NO,@Save should not fail \ n%@,[error localizedDescription]);
abort();
}


I have an entity in my core data model like this:

@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;

I have created many Selections and saved them in Core Data and now I would like to delete some selections with some criteria. For example, I would like to delete a Selection object if matches the following:

content = test
page_id = 5
book_id = 1331313

How I can do this?

解决方案

What Mike Weller wrote is right. I'll expand the answer a little bit.

First you need to create a NSFetchRequest like the following:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];    
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Selection" inManagedObjectContext:context]];

Then you have to set the predicate for that request like the following:

[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";

I'm using %@ since I'm supposing you are using objects and not scalar values.

Now you perform a fetch in the context with the previous request:

NSError* error = nil;
NSArray* results = [context executeFetchRequest:fetchRequest error:&error];

results contains all the managed objects that match that predicate.

Finally you could grab the objects and call a deletion on them.

[context deleteObject:currentObj];

Once done you need to save the context as per the documentation.

Just as a new object is not saved to the store until the context is saved, a deleted object is not removed from the store until the context is saved.

Hence

NSError* error = nil;
[context save:&error];

Note that save method returns a bool value. So you can use an approach like the following or display an alert to the user. Source NSManagedObjectContext save error.

NSError *error = nil;
if ([context save:&error] == NO) {
    NSAssert(NO, @"Save should not fail\n%@", [error localizedDescription]);
    abort();
}

这篇关于删除核心数据中的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆