2010-03-27 9 views
7

Ich verwende CoreData mit iPhone SDK. Ich mache eine Notizen App. Ich habe eine Tabelle mit Notizobjekten, die von meinem Modell angezeigt werden. Wenn eine Schaltfläche gedrückt wird, möchte ich den Text in der Textansicht in dem Objekt speichern, das bearbeitet wird. Wie mache ich das? Ich habe mehrere Dinge versucht, aber keiner scheint zu funktionieren.Objekt in CoreData speichern

Dank

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(); 
} 

Der obige Code es richtig spart, sondern es speichert es als neues Objekt. Ich möchte, dass es so gespeichert wird, wie ich es in meiner TableView ausgewählt habe.

Antwort

14

Sie sollten die Core Data Programming Guide überprüfen. Es ist schwer, genau zu wissen, was Sie von der Frage wollen, aber die Grundidee ist:

-(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: Wenn Sie ein bereits existierendes Objekt bearbeiten mögen, sollten Sie das Objekt aus dem abgerufenen Ergebnissen Controller erhalten, z.B. NSManagedObject *currentObject = [fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]], dann bearbeiten Sie das Objekt. Ich würde auch empfehlen, eine benutzerdefinierte Unterklasse von NSManagedObject mit Eigenschaftsdeklarationen zu verwenden, anstatt setValue:forKey zu verwenden, da es flexibler ist.

+0

Danke, eigentlich hat das gerade funktioniert. Musste es ein bisschen ändern, weil ich mit dem iPad arbeite, aber im Grunde den gleichen Code. Vielen Dank – John