Я встроил некоторую поддержку Core Data в свое приложение из примера Core Data Books.В примере используются даты и строки.Однако я попытался добавить возможность добавлять и редактировать целочисленное значение.
//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 от Apple, мой код такой же, только я добавил поле, которое принимает целое число 16.
РЕДАКТИРОВАТЬ:
При установке точки останова на первом, еслиоператор и возвращая 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
- это строковый атрибут в моей модели данных.Я предполагаю, потому что это первое, если утверждение терпит неудачу, оно идет вперед и ожидает целое число?Я действительно не уверен.