Tengo algunos problemas al pasar el contexto del delegado de la aplicación al controlador de la vista. He encontrado muchos tutoriales en Internet, y todos sugieren utilizar el método didFinishLaunchingWithOptions
para crear el controlador de vista, establecer la propiedad del contexto y presionarlo. Mi problema es que quiero utilizar el guión gráfico, y el controlador de vista se crea y se inserta dentro de él, y no en el delegado de la aplicación.Pasar el contexto en iOS para usar Core Data con Storyboard
He intentado hacer esto en mi aplicación delegado:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//instantiate local context
NSManagedObjectContext *context = [self managedObjectContext];
if (!context)
{
// Handle the error.
NSLog(@"Error: Context is null");
}
//reference the view controller
helloCoreDataViewController1_001 *rootViewController = [helloCoreDataViewController1_001 alloc];
// Pass the managed object context to the view controller
rootViewController.managedObjectContext = context;
return YES;
}
y esto en mi controlador de vista:
@implementation helloCoreDataViewController1_001
@synthesize name, address, phone, status, managedObjectContext;
//....
- (IBAction)saveContact
{
NSLog(@"name: %@",self.name.text);
NSLog(@"address: %@",self.address.text);
NSLog(@"phone: %@",self.phone.text);
//Save the new instance of the contact entity
Contact *contact = (Contact *)[NSEntityDescription insertNewObjectForEntityForName:@"Contacts" inManagedObjectContext:managedObjectContext];
[contact setContactName:[NSString stringWithFormat:@"%@",self.name.text]];
[contact setValue:self.address.text forKey:@"address"];
[contact setContactPhone:[NSString stringWithFormat:@"%@",self.phone.text]];
NSError *error = nil;
if (![managedObjectContext save:&error])
{
// Handle the error.
NSLog(@"error: %@", error.description);
self.status.text = @"Error: contact NOT saved";
}
else
self.status.text = @"Contact saved";
}
Cuando elimino errores, puedo ver que en el delegado de la aplicación, el contexto se llena correctamente, y también la propiedad en el controlador de vista está bien. Pero cuando se invoca mi método saveContact
, el contexto está vacío.
¿Tiene alguna sugerencia al respecto? ¿Cómo puedo pasar el contexto al controlador de visualización con guión gráfico?
Esto hace que su jerarquía de clases muy rígido, el controlador de vista ahora debe saber sobre el delegado de la aplicación y depende de ella. Personalmente prefiero tener una propiedad en mi controlador de vista que asigno al crear la vista. –
@Chris tienes razón. Este es solo otro método. Pensé usar esto en una de mis aplicaciones que tiene un contexto diferente. Esta es solo otra opción, entonces ... – Farini