В каждом методе в каждом классе моего приложения IOS, за исключением AppDelegate, у меня есть следующие строки кода:Есть ли лучший способ определить определения NSManagedObjectContext для MagicalRecord?
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
В моем файле AppDelegate.h я это:
NSManagedObjectContext *localContext;
и в моем файле AppDelegate.m у меня есть это:
localContext = [NSManagedObjectContext MR_contextForCurrentThread];
Я недавно прочитал в SO, что я должен иметь один такой строки кода в AppDelegate, а затем несколько refere nce к нему из всех других классов/методов.
Если я оставлю эту строку кода из всех классов, за исключением AppDelegate, выполним ли это, но это лучший способ для этого?
UPDATE Это код, который я добавил к моему AppDelegate.h файла:
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSManagedObjectContext *localContext;
Это код, который я добавил к моему AppDelegate.m файла:
// set default MagicalRecord context in all View Controllers
UITabBarController *tbc = (UITabBarController *)self.window.rootViewController;
UINavigationController *nc = tbc.viewControllers[0];
CalendarViewController *cvController = (CalendarViewController *)nc.topViewController;
cvController.localContext = self.managedObjectContext;
nc = tbc.viewControllers[1];
WeeksApptsViewController *waController = (WeeksApptsViewController *)nc.topViewController;
waController.localContext = self.managedObjectContext;
nc = tbc.viewControllers[2];
CustomerSetupController *csController = (CustomerSetupController *)nc.topViewController;
csController.localContext = self.managedObjectContext;
nc = tbc.viewControllers[3];
AppointmentsViewController *avController = (AppointmentsViewController *)nc.topViewController;
avController.localContext = self.managedObjectContext;
nc = tbc.viewControllers[5];
SettingsViewController *sController = (SettingsViewController *)nc.topViewController;
sController.localContext = self.managedObjectContext;
Когда я запустите приложение в отладчике, он сработает в этой строке кода:
CalendarViewController *cvController = (CalendarViewController *)nc.topViewController;
со следующим сообщением:
* Нагрузочного приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: '- [CalendarViewController viewControllers]: непризнанный селектор направил к экземпляру 0xb67ed40'
Вы должны проверить фактический класс всех контроллеров представления. Начните с 'tbc = self.window.rootViewController'. Это действительно UITabBarController? Затем проверьте 'nc = tbc.viewControllers [0]' это действительно UINavigationController? И так далее ... - Я предполагаю, что CalendarViewController на первой вкладке не встроен в контроллер навигации. В этом случае 'CalendarViewController * cvController = tbc.viewControllers [0];' должен работать. –