为什么我不能更新核心数据实体属性的布尔值?

时间:2012-06-02 23:57:07

标签: objective-c core-data attributes boolean

这真让我烦恼。在Objective-C中,我有一个Item实体,其布尔属性为Deleted。我希望能够将Deleted的值设置为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的属性CodeName的末尾。当我查看数据表时,这些值的字符串会相应更新,但Deleted的值仍为0。

1 个答案:

答案 0 :(得分:9)

我强烈建议为此属性使用其他名称。 NSManagedObject已经有与此名称密切相关的方法(特别是-isDeleted),这可能会导致与您的自定义属性名称冲突。 NSPropertyDescription的{​​{3}}表示:

  

请注意,属性名称不能与任何无参数相同   NSObject或NSManagedObject的方法名称。例如,你不能   将属性命名为“description”。有数百种方法   在NSObject上可能与属性名称冲突 - 这个列表可以   在没有框架或其他库的警告的情况下成长。你应该   避免非常一般的单词(如“font”和“color”)和单词或   与Cocoa范式重叠的短语(例如“isEditing”和   “objectSpecifier”)。

如果您将属性的名称更改为不可能与任何其他属性/方法名称冲突的内容,您的代码是否有效?