10

次のようなコア データ モデルにエンティティがあります。

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

多くSelectionの を作成して Core Data に保存しましたが、いくつかの基準でいくつかの選択を削除したいと考えています。たとえばSelection、次のように一致する場合、オブジェクト を削除したいと思います。

content = test
page_id = 5
book_id = 1331313

どうすればこれを行うことができますか?

4

3 に答える 3

34

マイク・ウェラーの書いたことは正しい。答えを少し拡大します。

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

どこ

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();
}
于 2012-05-07T13:16:17.077 に答える
5

を使用して適切な条件でフェッチ リクエストを実行し、結果セット内の各オブジェクトでメソッドをNSPredicate呼び出す必要があります。deleteObject:NSManagedObjectContext

于 2012-05-07T12:49:22.347 に答える
4

Mike Weller と flexaddicted に加えて、呼び出した後、コンテキスト[context deleteObject:currentObj];を確認する必要があります。save:

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

ドキュメントからのように:

コンテキストが保存されるまで新しいオブジェクトがストアに保存されないのと同様に、削除されたオブジェクトはコンテキストが保存されるまでストアから削除されません。

それは私の場合に問題になりました。

于 2013-05-06T07:17:28.070 に答える