我已经在核心数据手册示例中为我的应用程序内置了一些核心数据支持。该示例使用日期和字符串。不过,我已经尝试添加添加和编辑整数值的功能。核心数据检测字符串还是整数?
//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]])
不能以某种方式工作。
希望你能帮上忙。让我知道如果你需要更多继续。如果你看一下苹果的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]'来查看它是什么。 –
检查我的编辑,我发布了一些结果。 –