带有故事板的instantiateViewControllerWithIdentifier

时间:2015-03-02 16:25:15

标签: ios objective-c xcode

我有一个复杂的项目(我没写过)。 我不得不在故事板的第一个屏幕之前添加一个新屏幕。 在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;

1 个答案:

答案 0 :(得分:0)

这意味着您尝试使用此标识符实例化FavoriteMealsViewController:@&#34; mealsScene&#34;实际上是实例化UINavigationController。转到你的故事板并确保你使用的ID是用于FavoriteMealsViewController,而不是导航控制器,它应该工作