在我的 iOS 应用程序的每个类的每个方法中,除了 AppDelegate,我都有以下代码行:
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
在我的 AppDelegate.h 文件中,我有这个:
NSManagedObjectContext *localContext;
在我的 AppDelegate.m 文件中,我有这个:
localContext = [NSManagedObjectContext MR_contextForCurrentThread];
我最近读到,我应该在 AppDelegate 中有一行这样的代码,然后从所有其他类/方法中多次引用它。
如果我将这行代码从除 AppDelegate 之外的所有类中删除,我是否会做到这一点,但这是最好的方法吗?
更新 这是我添加到 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”