iOS アプリのすべてのクラスのすべてのメソッド (AppDelegate を除く) には、次のコード行があります。
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
私の AppDelegate.h ファイルには次のものがあります。
NSManagedObjectContext *localContext;
私の AppDelegate.m ファイルには次のものがあります。
localContext = [NSManagedObjectContext MR_contextForCurrentThread];
私は最近 SO を読んで、AppDelegate にそのようなコード行を 1 つ持つ必要があり、他のすべてのクラス/メソッドからそれを複数参照する必要があります。
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 に送信されました'