2010-03-27 24 views
7

Estoy usando CoreData con iPhone SDK. Estoy haciendo una aplicación de notas. Tengo una tabla con objetos de notas que se muestran desde mi modelo. Cuando se presiona un botón, quiero guardar el texto en la vista de texto para el objeto que se está editando. ¿Cómo hago esto? He estado probando varias cosas, pero ninguna parece funcionar.Guardar objeto en CoreData

Gracias

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

El código anterior lo guarda correctamente pero la guarda como un nuevo objeto. Quiero que se guarde como el que he seleccionado en mi tableView.

Respuesta

14

Deberías echarle un vistazo al Core Data Programming Guide. Es difícil saber exactamente lo que quiere de la pregunta, pero la idea básica es:

-(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: Si desea editar un objeto preexistente, usted debe conseguir el objeto desde el controlador resultados exagerado, por ejemplo, NSManagedObject *currentObject = [fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]], luego edita ese objeto. También recomendaría usar una subclase personalizada de NSManagedObject con declaraciones de propiedades, en lugar de utilizar setValue:forKey, ya que es más flexible.

+0

Gracias, en realidad acaba de resolver esto. Tuve que modificarlo un poco porque estoy trabajando con el iPad pero básicamente el mismo código. Gracias – John

Cuestiones relacionadas