2012-06-02 8 views
5

これは本当に迷惑です。 Objective-Cでは、boolean属性Deletedを持つItemエンティティがあります。私はYESにDeletedまたは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]; 

何かが、私は成功し、異なる属性を変更することができるだということです。たとえば、の属性CodeNameの末尾に-DELという文字列を追加します。データ表を表示すると、その値の文字列も対応して更新されますが、Deletedの値は0のままです。

+0

エンティティの説明はどうなりますか?ネイティブ整数型を使用していますか? @ "Deleted" –

+0

ItemのMy EntityヘッダーファイルにNSNumber * Deletedがあります。コアデータモデルでは、ブール値として表示されます。valueForKeyを呼び出すと、それを印刷すると、 "0"が印刷されます。 – Rail24

+0

あなたの属性は一時的であると宣言されていますか?次に、更新の前後にログステートメントを配置してください。お知らせ下さい。 –

答えて

9

この属性に別の名前を使用することを強く推奨します。 NSManagedObjectには、この名前に密接に関連したメソッド(特に-isDeleted)があり、カスタム属性名と衝突する可能性があります。 NSPropertyDescriptionためthe documentationとしてこう述べています。プロパティ名は、NSObjectのかNSManagedObjectの任意のパラメータなし メソッド名と同じにすることができないという

注意を。たとえば、 プロパティに名前 "description"を指定することはできません。 NSObjectには何百ものメソッドがあり、プロパティ名と競合する可能性があります。 は、フレームワークや他のライブラリから警告なしで拡大することができます。あなたは と単語やココアのパラダイムと重複 フレーズ(例えば 『isEditing』などと 『objectSpecifier』)(「フォント」、および 『色』のような)非常に一般的な言葉を避けるべきである。

あなたのコードをいあなたのプロパティの名前を他のプロパティ/メソッド名と衝突しないように変更した場合にはどうすればよいでしょうか?

+0

それはトリックです。私は "Deleted"属性を "DeletedBoolean"に変更しました。コード内のいくつかの反射とそれは今完全に動作します。どうもありがとうございます。 – Rail24

+0

1時間以上、「削除済み」プロパティを「1」に設定できない理由を理解しようとしました。ありがとうございました。 – daleijn