Сохранение изменений в существующей сущности с помощью Core Data - PullRequest
1 голос
/ 04 августа 2011

У меня есть приложение заметок, которое я пытаюсь смоделировать после приложения Apple Notes. У меня есть NotesTableViewController, который отображает существующие заметки и имеет кнопку для добавления новых заметок. При нажатии кнопки добавления новых заметок NoteViewController помещается в стек, и пользователь может вводить свои заметки. При нажатии кнопки «Назад» вызывается метод saveNote, указанный ниже. Эта часть отлично работает. Проблема возникает, когда я пытаюсь сохранить изменения в существующей заметке. Я выбираю заметку из NotesTableViewController, появляется NoteViewController, я делаю некоторые изменения и нажимаю кнопку назад, когда закончите. Это просто создает новую заметку вместо обновления существующей. Как мне изменить приведенный ниже метод для достижения этой цели?

- (void) saveNote
{
    NSLog(@"Save");
    NSManagedObjectContext *context = self.managedObjectContext;

    NSEntityDescription *entity = [NSEntityDescription 
                                   entityForName:@"Note"
                                   inManagedObjectContext:context];

    Note *newManagedObject = 
    [NSEntityDescription insertNewObjectForEntityForName:[entity name] 
                                  inManagedObjectContext:context];

    // If appropriate, configure the new managed object.
    if ([textView hasText])
    {
        [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"];
        [newManagedObject setValue:self.title forKey:@"noteName"];
        [newManagedObject setValue:textView.text forKey:@"noteText"];
        //NSLog(@"%@", textView.text);
    }

    NSError *error = nil;
    if (![context save:&error]) {
        /*
         Replace this implementation with code to handle the error 
         appropriately.

         */
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    [self.navigationController popViewControllerAnimated:YES];
}

1 Ответ

1 голос
/ 04 августа 2011

Получил это работает.Ниже приведен новый метод saveNote, который работает.Кроме того, в tableView для NotesTableViewController: didSelectRowAtIndexPath: у меня не был установлен для управляемого объекта для объекта NoteViewController выбранный управляемый объект.

Note *managedNoteObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
//  Where detailViewController is an instance of NoteViewController.
detailViewController.managedObject = managedNoteObject;


- (void) saveNote
{
    NSLog(@"Save");

    if([textView hasText])
    {
        [managedObject setValue:[NSDate date] forKey:@"timeStamp"];
        NSLog(@"timeStamp: %@", [managedObject valueForKey:@"timeStamp"]);
        [managedObject setValue:self.title forKey:@"noteName"];
        NSLog(@"NoteName: %@", [managedObject valueForKey:@"noteName"]);
        [managedObject setValue:textView.text forKey:@"noteText"];
        NSLog(@"%@", managedObject);
    }

    NSError *error = nil;
    if (![self.managedObjectContext save:&error]) {
        /*
         Replace this implementation with code to handle the error 
         appropriately.

         */
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    [self.navigationController popViewControllerAnimated:YES];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...