2010-03-27 19 views
7

Używam CoreData z iPhone SDK. Robię aplikację do notatek. Mam tabelę z obiektami nut wyświetlanymi z mojego modelu. Po naciśnięciu przycisku chcę zapisać tekst w widoku tekstowym do edytowanego obiektu. Jak mam to zrobic? Próbowałem kilku rzeczy, ale żaden nie działa.Zapisz obiekt w CoreData

Dzięki

EDIT:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext]; 
NSEntityDescription *entity = [[fetchedResultsController fetchRequest] entity]; 
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; 
[newManagedObject setValue:detailViewController.textView.text forKey:@"noteText"]; 

NSError *error; 
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. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button. 
    */ 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

Powyższy kod zapisuje go poprawnie, ale zapisuje go jako nowy obiekt. Chcę, aby został zapisany jako ten, który wybrałem w moim tableView.

Odpowiedz

14

Powinieneś sprawdzić numer Core Data Programming Guide. Trudno dokładnie wiedzieć, czego chcesz od kwestii, ale podstawowa idea jest:

-(IBAction)saveNote { //hooked up in Interface Builder (or programmatically) 
    self.currentNote.text = self.textField.text; //assuming currentNote is an NSManagedObject subclass with a property called text, and textField is the UITextField 
} 

//later, at a convenient time such as application quit 
NSError *error = nil; 
[self.managedObjectContext save:&error]; //saves the context to disk 

EDIT: Jeśli chcesz edytować istniejący uprzednio przedmiot, należy uzyskać obiekt z pobranego sterownika wyników, na przykład NSManagedObject *currentObject = [fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]], a następnie edytuj ten obiekt. Polecam również używanie niestandardowej podklasy NSManagedObject z deklaracjami właściwości, zamiast używać setValue:forKey, ponieważ jest bardziej elastyczna.

+0

Dzięki, właściwie to udało się. Musiałem go trochę zmodyfikować, ponieważ pracuję z iPadem, ale w zasadzie ten sam kod. Dzięki – John

Powiązane problemy