从AppDelegate调用后,performSegueWithIdentifier NSInvalidArgumentException

时间:2013-11-07 23:20:50

标签: ios storyboard segue

嘿嘿,

我在主视图中使用AppDelegate中的一些参数调用void。 如果收到推送通知,则完成此操作:

MainViewController *mainView = [[MainViewController alloc] init];
[mainView showPushView:pushDataObject];

调用void @ MainView做一些数据操作的东西,然后它应该加载pushView:

- (void)showPushView: (PFObject *)pushDataObject {
    NSLog(@"Push Data object transfered %@", pushDataObject);
    pushItem = pushDataObject;
    //All working fine to this point 
    [self performSegueWithIdentifier:@"showPushObject" sender:self];
}

现在问题是应用程序在[self performSegueWithIdentifier:@"showPushObject" sender:self];崩溃时出现此错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'Receiver (<MainViewController: 0x145b80e0>) has no segue with identifier 'showPushObject''
*** First throw call stack:
(0x2e51fe83 0x3887c6c7 0x30f656d9 0xbeb11 0xb2a23 0x1745f7 0x38d610c3 0x38d610af 0x38d639a9 0x2e4ea5b1 0x2e4e8e7d 0x2e453471 0x2e453253 0x3318d2eb 0x30d08845 0xafecd 0x38d75ab7)
libc++abi.dylib: terminating with uncaught exception of type NSException

我认为存在问题,因为我从AppDelegate调用了空白,我是对的吗?

有谁知道解决这个问题?

非常感谢! 来自德国的致敬:)

P.S。如果我用MainViewController上的按钮或其他东西调用[self performSegueWithIdentifier:@"showPushObject" sender:self];,一切正常...:/

2 个答案:

答案 0 :(得分:0)

你的问题就在这一行:

MainViewController *mainView = [[MainViewController alloc] init];

因为这意味着mainView实例没有故事板(所以它不能有任何分段)。

从按钮运行时,必须从故事板创建控制器实例。

因此,要修复,请加载故事板并从中实例化mainView。然后segue将起作用。


UIStoryboard *storyboard4Inch = [UIStoryboard storyboardWithName:@"Storyboard4Inch" bundle:nil];
UIViewController *mainViewController = [storyboard4Inch instantiateViewControllerWithIdentifier:@"MainViewController"];
[mainViewController showPushView:pushDataObject];

答案 1 :(得分:0)

为了让segue工作,当你以这种方式启动时,你需要在mainView中加载故事板。尝试这样的事情:

self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *firstViewController = [storyboard instantiateViewControllerWithIdentifier:@"kYourMainViewControllerIdentifier"];
self.window.rootViewController = firstViewController;
[self.window makeKeyAndVisible];

请记住为根视图控制器提供一个标识符,并在这段代码中进行更改。