2013-12-24 9 views
1

В моем приложении iOS у меня есть табличный вид, показывающий экземпляры из объекта Core Data. После выбора строки приложение открывает деталь представления из значений атрибутов экземпляра, и пользователь может изменить их, если это необходимо. От контроллера табличного я прохожу NSManagedObject используя didSelectRowAtIndexPath метод:Сохранение обновленного экземпляра Core Data

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {   

    EditToDoViewController *detailViewController = [[EditToDoViewController alloc] initWithNibName:@"EditToDoViewController" bundle:nil]; 
    NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
    detailViewController.selectedObject = selectedObject; 
    //[self.navigationController pushViewController:detailViewController animated:YES]; 

    [self presentViewController:detailViewController animated:YES completion:nil]; 
} 

Затем на EditToDoViewController, я покажу значения экземпляра с помощью текстовых полей, как показано ниже:

ToDoTextField.text = [[selectedObject valueForKey:@"thingName"]description]; 

Но дон Теперь не знаю, как реализовать метод сохранения для хранения обновленного файла ToDoTextField.text В файле реализации AddToDoViewController я использую следующий код внутри метода действия кнопки сохранения, но я не хочу вставлять новый объект, я хочу его обновить ,

AppDelegate* appDelegate = [AppDelegate sharedAppDelegate]; 
NSManagedObjectContext* context = appDelegate.managedObjectContext; 

NSManagedObject *favoriteThing = [NSEntityDescription insertNewObjectForEntityForName:@"FavoriteThing" inManagedObjectContext:context]; 
NSString *todoText = ToDoTextField.text; 
[favoriteThing setValue:todoText forKey:@"thingName"]; 
NSError *error; 
if(![context save:&error]) 
{ 
    NSLog(@"Whoopw,couldn't save:%@", [error localizedDescription]); 
} 
+1

Простой совет. Используйте переменные camelCase для переменных. Таким образом, 'ToDoTextField' станет' toDoTextField'. –

+0

Посмотрите на этот ответ на аналогичный вопрос [здесь] (http://stackoverflow.com/questions/10571786/how-to-update-existing-object-in-core-data/10572134#10572134). Это должно быть то, что вы ищете. – adeiji

+0

Спасибо, это была большая помощь. но ответ от @bilobatum был именно тем, что я искал. – mvasco

ответ

1

AddToDoViewController необязательно обновлять управляемый объект. Поскольку EditToDoViewController был передан управляемый объект, он мог бы обновить управляемый объект, когда пользователь закончит редактирование.

// EditToDoViewController implementation 
- (IBAction)SaveButtonAction:(id)sender { 

    AppDelegate* appDelegate = [AppDelegate sharedAppDelegate]; 
    NSManagedObjectContext* context = appDelegate.managedObjectContext; 

    [selectedObject setValue:ToDoTextField.text forKey:@"thingName"]; 

    NSError *error; 
    if(! [context save:&error]) 
    { 
     NSLog(@"Whoopw,couldn't save:%@", [error localizedDescription]); 
    } 
} 
+0

Ваш ответ прекрасен, но после редактирования объекта и возврата к представлению таблицы возникает проблема, отредактированный объект изменяется, как ожидалось, но не сохраняется в основных данных, а затем после запуска приложения снова появляется текст, который появляется старый, а не обновленный ... ?? – mvasco

+0

EditToDoViewController также может сохранять в контексте для вас. Я уточню свой ответ. – bilobatum

+0

Спасибо, я жду его ... :) – mvasco

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