我有一个复杂的项目(我没写过)。 我不得不在故事板的第一个屏幕之前添加一个新屏幕。 在App Delegate中,他们硬编码从故事板中获取View Controller。 我重写此代码的尝试崩溃了。
原始代码(AppDelegate.m):
UINavigationController *favoriteMealsNavigationController = [[tabBarController viewControllers] objectAtIndex:1];
FavoriteMealsViewController *favoriteMealsViewController = [[favoriteMealsNavigationController viewControllers] objectAtIndex:0];
[favoriteMealsViewController setManagedObjectContext:[self managedObjectContext]];
我的尝试:
FavoriteMealsViewController *favoriteMealsViewController = (FavoriteMealsViewController *)[self.mainStoryboard instantiateViewControllerWithIdentifier:@"mealsScene"];
//crashes here:
[favoriteMealsViewController setManagedObjectContext:[self managedObjectContext]];
错误讯息: [UINavigationController setManagedObjectContext:]:无法识别的选择器发送到实例0x17d7bfe0 ***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [UINavigationController setManagedObjectContext:]:无法识别的选择器发送到实例
* favoriteMealsViewController非null self.managedObjectContext为非null
这是FavoriteMealsViewController.h中的代码
@interface FavoriteMealsViewController : UIViewController <NSFetchedResultsControllerDelegate, UIActionSheetDelegate, MealAddDelegate>
/** The managed object context associated with the Core Data Model. */
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@end
这是FavoriteMealsViewController.h中的相关代码:
@synthesize managedObjectContext = _managedObjectContext;
答案 0 :(得分:0)
这意味着您尝试使用此标识符实例化FavoriteMealsViewController:@&#34; mealsScene&#34;实际上是实例化UINavigationController。转到你的故事板并确保你使用的ID是用于FavoriteMealsViewController,而不是导航控制器,它应该工作