0

特定の属性を削除しようとしています

tipdescription | tip number | tipindex    

go to school   |  001       |   21

come home      |  004       |   54

lock home      |  008       |   86

「ロックホーム」列全体を削除するにはどうすればよいですか? 次のコードを試しました

app = [[ UIApplication sharedApplication] delegate]; 

NSFetchRequest *req = [[NSFetchRequest alloc]init];

[req setEntity:[NSEntityDescription entityForName:@"Tips" inManagedObjectContext:app.managedObjectContext]];
NSString *deletestatement =[[NSString alloc] initWithFormat:@"lock home"];

[req setPredicate:[NSPredicate predicateWithFormat:@"tipdescription LIKE  %@", deletestatement]];
NSError *error;
Tips *std = [[app.managedObjectContext executeFetchRequest:req error:&error] lastObject];

[app.managedObjectContext deleteObject:std];

実行すると、次のエラーが表示されます。

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-deleteObject: nil 以外の引数が必要です

4

1 に答える 1

0

次のような述語を使用しないでください。

[req setPredicate:[NSPredicate predicateWithFormat:@"tipdescription ==  %@", deletestatement]];

よりクリーンなアプローチは、ヒント番号に対して述語することです(私はそれが識別子であり、であると思いますNSString

[req setPredicate:[NSPredicate predicateWithFormat:@"tipnumber ==  %@", @"001"]];

さらに、フェッチ リクエストを実行するときに、いくつかの条件制御を行います。

NSManagedObjectContext* myContext = app.managedObjectContext;

NSArray* result = [myContext executeFetchRequest:req error:&error];
if([result count] > 0) {

    Tips *std = (Tips*)[result objectAtIndex:0];
    [myContext deleteObject:std];
} else {

    NSLog(@"No result");
}
于 2012-07-09T09:39:33.003 に答える