6

これは本当に迷惑です。Objective-CにはItem、ブール属性を持つエンティティがありますDeletedDeletedの値をYESまたは1に設定できるようにしたいと思います。

これは私のコードです:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSString *itemID = [[fetchedObjects objectAtIndex:(int)[currentTable selectedRow]] valueForKey:@"ItemID"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ItemID = %@", itemID];
[fetchRequest setPredicate:predicate];

NSError *error = nil;
Item *objectToDelete = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] objectAtIndex:0];
if (objectToDelete == nil) {
    NSLog(@"ERROR");
}

[fetchRequest release];

[objectToDelete setValue:[NSNumber numberWithBool:YES] forKey:@"Deleted"];

[managedObjectContext save:&error];

注意すべき点は、さまざまな属性を正常に変更できることです。例:文字列-DELをItemの属性Codeとの最後に追加しますName。データのテーブルを表示すると、それらの値の文字列はそれに応じて更新されますが、の値はDeleted引き続き0です。

4

1 に答える 1

10

この属性に別の名前を使用することを強くお勧めします。NSManagedObjectすでにこの名前(特に)に密接に関連するメソッドが-isDeletedあり、カスタム属性名との衝突が発生する可能性があります。のドキュメントが言うようにNSPropertyDescription

プロパティ名は、NSObjectまたはNSManagedObjectのパラメータなしのメソッド名と同じにすることはできないことに注意してください。たとえば、プロパティに「description」という名前を付けることはできません。NSObjectには、プロパティ名と競合する可能性のあるメソッドが何百もあります。このリストは、フレームワークや他のライブラリからの警告なしに大きくなる可能性があります。非常に一般的な単語(「font」や「color」など)や、Cocoaパラダイムと重複する単語やフレーズ(「isEditing」や「objectSpecifier」など)は避けてください。

プロパティの名前を他のプロパティ/メソッド名と衝突する可能性が低い名前に変更した場合、コードは機能しますか?

于 2012-06-03T19:12:09.917 に答える