2013-11-07 5 views
0

Эй вместе,performSegueWithIdentifier NSInvalidArgumentException после звонка из AppDelegate

Я зову пустоту с некоторыми параметрами из AppDelegate на моем главном экране. Это делается, если толчок уведомление получено:

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

Вызываемый аннулируются @ в 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. Если я позвоню [self performSegueWithIdentifier:@"showPushObject" sender:self]; с помощью кнопки или что-то на MainViewController все работает нормально ...:/

+0

Итак, он работает, когда вы выполняете 'segue' из метода в контроллере представления, но в этом случае вы пытаетесь выполнить' segue' из 'appDelegate'? И 'mainView' является' @ свойством 'вашего' appDelegate'? – nhgrif

+0

@nhgrif да, это так! –

+0

В этом случае на ваш вопрос уже был дан ответ. – nhgrif

ответ

0

Ваша проблема эта линия:

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

, потому что это означает, что экземпляр mainView не имеет раскадровки (так что у него не может быть никаких сцен).

Когда вы запускаете его с помощью кнопки, экземпляр контроллера должен быть создан из раскадровки.

Итак, чтобы исправить, загрузите раскадровку и создайте экземпляр mainView. Затем будет работать segue.


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

Хорошо, я думаю, я понимаю, где проблема ... –

+0

Можете ли вы на самом деле показать мне как загрузить раскадровку и создать экземпляр mainView? :) –

+0

'UIStoryboard storyboardWithName: bundle:' для загрузки раскадровки, а затем 'instantiateViewControllerWithIdentifier:' для контроллера вида (который должен иметь набор идентификаторов. – Wain

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]; 

Не забудьте дать идентификатор контроллера вид корневого и изменить его в этой части кода.

Смежные вопросы