2015-06-12 4 views
0

То, что я пытаюсь сделать, это взять текст, который находится в моем 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.

+0

Какого типа 'self.toDoItemName'? – Paulw11

+0

'@property (сильный, неатомный) IBOutlet UITextField * editItemField; ' ' @property (неатомный, сильный) NSString * toDoItemName; ' ' @property (неатомный, сильный) NSManagedObjectContext * managedObjectContext; ' – Martin

+0

Так что это' NSString' - почему вы относитесь к нему как к словарю? Вам нужна ссылка на экземпляр 'NSManagedObject'. – Paulw11

ответ

1

Вам необходимо отправить экземпляр NSManagedObject к следующему контроллеру представления, не только в пределах одной строки

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"EditItemSegue"]) 
    { 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
     Item *item = [[self fetchedResultsController]objectAtIndexPath:indexPath]; 
     NextVCClass *destination = (NextVCClass *)segues.destinationViewController; 
     destination.managedObjectContext=self.managedObjectContext; 
     destination.toDoItem=item; 
    } 
} 

Вам нужно изменить NextVCClass к классу вашего назначения UIViewController подкласса

+0

Обновление оригинального сообщения – Martin

+0

Вам нужно изменить определение 'toDoItemName' в классе контроллера точки назначения. Это должен быть 'Item *', а не 'NSString * '. Обратите внимание, что в моем ответе я использовал 'toDoItem',' toDoItemName', поскольку это лучшее имя для свойства, которое является «Item» – Paulw11

+0

Omg. Почему я не могу думать. – Martin

Смежные вопросы

 Смежные вопросы