【发布时间】:2011-12-11 21:03:04
【问题描述】:
我已经从 Core Data Books 示例中将一些 Core Data 支持内置到我的应用程序中。该示例使用日期和字符串。但是,我尝试添加添加和编辑整数值的功能。
//If the value is a string
if ([[editedObject valueForKey:editedFieldKey] isKindOfClass:[NSString class]]) {
textField.hidden = NO;
datePicker.hidden = YES;
textField.text = [editedObject valueForKey:editedFieldKey];
textField.placeholder = self.title;
[textField becomeFirstResponder];
}
//If the value is a number
else {
textField.hidden = NO;
datePicker.hidden = YES;
textField.text = [[editedObject valueForKey:editedFieldKey] stringValue];
textField.placeholder = self.title;
[textField becomeFirstResponder];
}
第一个 if 语句是示例代码(没有检查它是否为字符串,我添加了它),并且我添加了 else 语句以在它不是字符串而是整数时运行。它可以工作,但是现在当我编辑一个字符串时,它会跳过 if 语句,所以这行:if ([[editedObject valueForKey:editedFieldKey] isKindOfClass:[NSString class]]) 无法以某种方式工作。
如果您查看 Apple 的 CoreDataBooks 示例,我的代码是相同的,只是我添加了一个采用整数 16 的字段。
编辑
在第一个 if 语句上设置断点并在控制台中返回 po [editedObject valueForKey:EditedFiledKey] 时,我得到:Can't print the description of a NIL object.
我认为这是因为它是在制作对象之前?这发生在视图出现时(视图输入新字符串)。
这是在按下保存按钮时运行此代码:
- (IBAction)save {
// Set the action name for the undo operation.
NSUndoManager * undoManager = [[editedObject managedObjectContext] undoManager];
[undoManager setActionName:[NSString stringWithFormat:@"%@", editedFieldName]];
// Pass current value to the edited object, then pop.
if ([[editedObject valueForKey:editedFieldKey] isKindOfClass:[NSString class]]) {
[editedObject setValue:textField.text forKey:editedFieldKey];
}
else {
[editedObject setValue:[NSNumber numberWithInteger:[[textField text] integerValue]] forKey:editedFieldKey];
}
[self.navigationController popViewControllerAnimated:YES];
}
当它运行时,它会跳过第一个 if 语句并运行 else 语句,然后崩溃并显示错误:Unacceptable type of value for attribute: property = "firstName"; desired type = NSString; given type = __NSCFNumber; value = 0.
firstName 是我的数据模型中的字符串属性。我猜是因为第一个 if 语句失败,它会向前推进一个整数?我真的不确定。
【问题讨论】:
-
editedObject来自哪里?也许该值不是字符串。你应该在那行代码上设置一个断点,然后运行po [editedObject valueForKey:editedFieldKey]看看它是什么。 -
检查我的编辑,我发布了一些结果。
标签: iphone objective-c ipad core-data