2013-03-03 3 views
0

У меня возникли проблемы с получением Core Data для сохранения новых строк, которые я добавляю при использовании UITextField. Вот мой метод для вставки объектов в мое представление таблицы. Что должно произойти, когда я нажимаю кнопку «Добавить», нужно добавить текстовое поле, а затем перейти в режим редактирования. Затем, когда пользователь нажимает на клавиатуре, текстовое поле должно заканчивать редактирование, а затем текстовое поле должно сохранять запись в основные данные.Новые объекты не сохраняются должным образом при добавлении в tableView

Редактировать: удалить звонок до textFieldDidEndEditing в методе insertNewObject:(id)sender. Это был сбой приложения

- (void)insertNewObject:(id)sender { 

NSManagedObjectContext *context = [self.fetchedResultsController  managedObjectContext]; 

TehdaItem *item = [NSEntityDescription insertNewObjectForEntityForName:@"TehdaItem" inManagedObjectContext:context]; 


// If appropriate, configure the new managed object. 
// Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template. 


// Putting the cell in edit mode 
TehdaTableViewCell *editcell; 
for (TehdaTableViewCell *cell in [self.tableView visibleCells]) { 
    if (cell.itemLabel.text == item.itemTitle) { 

     editcell = cell; 

     break; 
    } 
} 



[editcell.itemLabel becomeFirstResponder]; 

// The cell needs to call the method textfield did end editing so that it can save the new object into the store 

// Save the context. 

NSError *error = nil; 
if (![context save:&error]) { 
    // Replace this implementation with code to handle the error appropriately. 
    // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

} 

Вот мой метод textFieldDidEndEditing:

- (void)textFieldDidEndEditing:(UITextField *)textField { 
TehdaTableViewCell *cell = (TehdaTableViewCell *) textField.superview.superview; 
TehdaItem *item = [self.fetchedResultsController objectAtIndexPath:[self.tableView indexPathForCell:cell]]; 

//TehdaTableViewCell *cell; 
item.itemTitle = cell.itemLabel.text; 

}

Не совсем уверен, куда идти отсюда. Любая помощь будет оценена по достоинству.

Спасибо.

ответ

0

Вы можете использовать

NSError *error; 
[item.managedObjectContext save:&error]; 
if (error) { 
// Triage the problem and respond appropriately 
} 

в методе - (void)textFieldDidEndEditing:(UITextField *)textField. Но если бы я был вами, я бы сделал некоторые проверки, прежде чем вы сохраните объект.

+0

Подтверждением вы имеете в виду использование метода контекста сохранения? Также спасибо за быстрый ответ! Я немного устал от этой проблемы. – cherbear

+0

Я бы не использовал ноль, а объект NSError TBH. Но вы по-прежнему хотите убедиться, что объект item не равен нулю, что данные не ноль и т. Д. ... Проверка данных перед сохранением сохранит тонну отладки времени позже. –

+0

Большое спасибо! Оно работает! Единственное, что мне нужно было изменить после добавления кода, было удаление '[editcell textFieldDidEndEditing: editcell.itemLabel];' он закончил сбой приложения, когда я попытался добавить ячейку. – cherbear