То, что я пытаюсь сделать, это взять текст, который находится в моем uitextfield под названием editItemField
, и записать значение в NSString под названием toDoItemName
в мою основную модель данных с атрибутом назван itemname
.Этот класс не является ключевым значением, совместимым с кодировкой для ключевого элемента name
Im получение вышеуказанной ошибки. Моя основная модель данных имеет один атрибут с именем itemname
. Я предполагаю, что это может означать, что я что-то делаю с объектом из NSArray, но я не могу это сделать, потому что это не часть управляемого объекта управления?
ошибка
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key itemname.'
код
- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
if (self.editItemField) {
// Update existing device
[self.toDoItemName setValue:self.editItemField.text forKey:@"itemname"];
}
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
prepareforsegue
Im передавая элемент из UITableView через этот ДГО eforsegue. его заполнение моего поля uitext на новом диспетчере представлений. цель состоит в том, чтобы отредактировать элемент, а затем обновить базовую модель данных с новым значением.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];
[segue.destinationViewController setToDoItemName:[item valueForKey:@"itemname"]];
}
}
редактировать
Может кто-нибудь сказать мне, если это выглядит правильно при отправке managedObjectContext?
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"EditItemSegue"]) {
EditItem *item = [segue destinationViewController];
item.managedObjectContext = _managedObjectContext;
}
}
обновлено Segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"EditItemSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath];
EditItem *destination = (EditItem *)segue.destinationViewController;
destination.managedObjectContext=self.managedObjectContext;
destination.toDoItem = item;
}
}
[NSManagedObject rangeOfCharacterFromSet]: непризнанные селектор направлен например 0x7fc223f5d350 2015-06-11 23: 10: 31,717 LittleToDoApp [95329: 10363535] *** нагрузочного app из-за неотображенного исключения NSInvalidArgumentException, причина: - [NSManagedObject rangeOfCharacterFromSet:]: непризнанный селектор, отправленный в экземпляр 0x7fc223f5d350
Ive никогда не видел эту ошибку. Это потому, что он не знает, куда отправить это в представление EditItem? Это происходит, конечно, когда я нажимаю на элемент в uitableview.
Какого типа 'self.toDoItemName'? – Paulw11
'@property (сильный, неатомный) IBOutlet UITextField * editItemField; ' ' @property (неатомный, сильный) NSString * toDoItemName; ' ' @property (неатомный, сильный) NSManagedObjectContext * managedObjectContext; ' – Martin
Так что это' NSString' - почему вы относитесь к нему как к словарю? Вам нужна ссылка на экземпляр 'NSManagedObject'. – Paulw11