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

Rai*_*l24 5 attributes boolean core-data objective-c

这真让我讨厌.在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];
Run Code Online (Sandbox Code Playgroud)

需要注意的是,我能够成功地改变不同的属性; 例如:我字符串-del添加到的末尾Item的属性CodeName.当我查看数据表时,这些值的字符串会相应更新,但值Deleted仍为0.

Sea*_*ean 9

我强烈建议为此属性使用不同的名称.NSManagedObject已经有与此名称密切相关的方法(特别是-isDeleted),这可能导致与您的自定义属性名称冲突.至于文件NSPropertyDescription说:

请注意,属性名称不能与NSObject或NSManagedObject的任何无参数方法名称相同.例如,您不能为属性指定名称"description".NSObject上有数百个可能与属性名称冲突的方法 - 这个列表可以在没有框架或其他库的警告的情况下增长.你应该避免使用非常通用的单词(比如"font"和"color")以及与Cocoa范例重叠的单词或短语(例如"isEditing"和"objectSpecifier").

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