2012-02-20 6 views
2

У меня есть собственный класс, написанный для пользовательской анимации segue. Я пытаюсь настроить анимационный жест. В моей раскадровке у меня есть контроллер навигации, основной вид, а затем два других вида. Ive связал жест с другим представлением и определил пользовательский класс для использования segue, но я получу ошибку ниже. У меня есть другой segue, используя просто Push, который отлично работает. Любые идеи о том, что я делаю неправильно?Custom Segue Animation Не работает

Это мой класс:

- (void) perform { 

    UIViewController *src = (UIViewController *) self.sourceViewController; 
    UIViewController *dst = (UIViewController *) self.destinationViewController; 

    [UIView transitionWithView:src.navigationController.view duration:0.8 
         options:UIViewAnimationOptionTransitionFlipFromBottom 
        animations:^{ 
         [src.navigationController pushViewController:dst animated:NO]; 
        } 
        completion:NULL]; 

} 

Ошибка:

2012-02-20 16:04:45.889 IdeaStarters[2755:fe03] -[__NSCFDictionary setView:]: unrecognized selector sent to instance 0x6a40010 
2012-02-20 16:04:45.891 IdeaStarters[2755:fe03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setView:]: unrecognized selector sent to instance 0x6a40010' 
*** First throw call stack: 
(0x13ba052 0x154bd0a 0x13bbced 0x1320f00 0x1320ce2 0x4fc3e 0x922f40 0x922eeb 0x50268 0x93dd60 0x3f8c54 0x3f8c8f 0x13bbe1a 0x1325821 0x22f46e 0xd6e2c 0xd73a9 0xd75cb 0xd7941 0xe947d 0xe966f 0xe993b 0xea3df 0xea561 0x2064ca 0x50301 0x13bbe72 0x1d6492d 0x1d6e827 0x1cf4fa7 0x1cf6ea6 0x1cf6580 0x138e9ce 0x1325670 0x12f14f6 0x12f0db4 0x12f0ccb 0x12a3879 0x12a393e 0x11a9b 0x2abd 0x2a25 0x1) 
terminate called throwing an exception(lldb) 
+0

Похоже мой код :) Пожалуйста, ваши полные .h и .m файлов. Это отлично работает для меня. Нам нужно выяснить, что вы можете делать по-другому. Указывает ли setView в сообщении об ошибке что-либо еще в контроллерах вашего представления? –

+0

Я предполагаю, что вы определили класс и стиль сека в сериале раскадровки. После этого я, вероятно, просто проверил бы, могу ли я перейти прямо к другому представлению w/выполнить segue с идентификатором, чтобы убедиться, что вы можете его ударить. – DJPlayer

+0

Оказывается, что viewcontroller поврежден или что-то еще, я воссоздал весь вид, и теперь все работает отлично. Я понятия не имею, что вызвало это, но все было настроено точно так же, как и мои другие секреты и работает префектом. – atrljoe

ответ

1

Вы можете найти полезным, чтобы всегда установить эту символическую точку останова.

https://github.com/brennanMKE/Interfaces/blob/master/NSAssertBreakpoint.png

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

Я использую NSAssert часто для проверки состояния перед вызовом чего-либо.

NSAssert([segue.destinationViewController isKindOfClass:[ABExpectedClass class]], @"Destination VC must be ABExpectedClass"); 

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

Попробуйте проверить другие пользовательские segues на GitHub. Есть много вариантов, которые вы можете использовать в качестве ссылки.

https://github.com/search?q=UIStoryboardSegue&ref=commandbar

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