【发布时间】:2012-06-02 23:57:06
【问题描述】:
这真的让我很烦。在 Objective-C 中,我有一个带有布尔属性 Deleted 的 Item 实体。我希望能够将 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 的属性 Code 和 Name 的末尾。当我查看数据表时,这些值的字符串会相应更新,但 Deleted 的值仍为 0。
【问题讨论】:
-
您的实体描述是什么样的?您是否使用本机整数类型?调用 valueForKey:@"Deleted" 得到什么
-
项目的我的实体头文件的 NSNumber * 已删除。在核心数据模型中,它被列为布尔值。当我在更改后调用 valueForKey:@"Deleted" 时,它会打印出“0”。
-
您的属性是否被声明为瞬态?然后,尝试在更新前后放一条日志语句。告诉我。
-
您确定您的属性名称以大写字母开头吗? Core Data 命名约定不允许这样做。再检查一遍。
-
我的属性没有描述为transient,实体名是Item,属性名是Deleted。属性名称是什么?
标签: objective-c core-data attributes boolean