0

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 に送信されました'

4

1 に答える 1