マイク・ウェラーの書いたことは正しい。答えを少し拡大します。
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();
}