Sto riscontrando alcuni problemi nel passaggio del contesto dal delegato dell'app al controller della vista. Ho trovato molti tutorial su internet e tutti suggeriscono di usare il metodo didFinishLaunchingWithOptions
per creare il controller di visualizzazione, impostare la proprietà context e premerla. Il mio problema è che voglio usare lo storyboard, e il controller di visualizzazione è stato creato e inserito all'interno di esso, e non nel delegato dell'app.Passare il contesto in iOS per utilizzare i dati principali con Storyboard
Ho provato a fare questo nella mia app delegato:
- (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;
}
e questo a mio controller della 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";
}
Quando il debug, vedo che nel delegato app, il contesto è popolato correttamente e anche la proprietà nel controller della vista è ok. Ma quando viene invocato il metodo saveContact
, il contesto è vuoto.
Avete suggerimenti a riguardo? Come posso passare il contesto al controller di visualizzazione con storyboard?
questo rende il vostro gerarchia di classe molto rigida, il controller di vista ora deve conoscere il delegato app e dipende da esso. Personalmente preferisco avere una proprietà sul mio controller di visualizzazione che assegno quando creo la vista. –
@Chris hai ragione. Questo è solo un altro metodo. Ho pensato di usarlo in una delle mie app che ha un contesto diverso. Questa è solo un'altra opzione allora ... – Farini