2015-06-04 2 views
0

Я изучаю Swift, я делаю курс в DesignCode, и теперь я пытаюсь создать приложение, чтобы улучшить то, что я узнал.Unwind не работает

Так что это то, что я делаю:

  • Я создал UIViewController и выполнить переход к UITableViewController;

  • В UITableViewController я встроен в навигационную панель, где создаю элемент кнопки «Назад»;

  • И я связываю это «Назад», чтобы выйти, выполняя segue, чтобы расслабиться через «Весну».

При нажатии на эту кнопку, я получаю следующее сообщение об ошибке:

2015-06-04 15:32:08.662 Vitrine[2883:67901] *** Assertion failure in -[UIStoryboardUnwindSegueTemplate _perform:], /SourceCache/UIKit_Sim/UIKit-3347.44/UIStoryboardUnwindSegueTemplate.m:78 
2015-06-04 15:32:08.676 Vitrine[2883:67901] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not find a view controller to execute unwinding for <UINavigationController: 0x7ae41540>' 
*** First throw call stack: 
(
    0 CoreFoundation      0x0154d746 __exceptionPreprocess + 182 
    1 libobjc.A.dylib      0x02f4ea97 objc_exception_throw + 44 
    2 CoreFoundation      0x0154d5da +[NSException raise:format:arguments:] + 138 
    3 Foundation       0x019c3720 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 118 
    4 UIKit        0x0253d3b4 -[UIStoryboardUnwindSegueTemplate _perform:] + 387 
    5 UIKit        0x0237c313 -[UIStoryboardSegueTemplate perform:] + 116 
    6 libobjc.A.dylib      0x02f647cd -[NSObject performSelector:withObject:withObject:] + 84 
    7 UIKit        0x01d72a90 -[UIApplication sendAction:to:from:forEvent:] + 99 
    8 UIKit        0x020f8bba -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 139 
    9 libobjc.A.dylib      0x02f647cd -[NSObject performSelector:withObject:withObject:] + 84 
    10 UIKit        0x01d72a90 -[UIApplication sendAction:to:from:forEvent:] + 99 
    11 UIKit        0x01d72a22 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64 
    12 UIKit        0x01eb318a -[UIControl sendAction:to:forEvent:] + 69 
    13 UIKit        0x01eb35a7 -[UIControl _sendActionsForEvents:withEvent:] + 598 
    14 UIKit        0x01eb2811 -[UIControl touchesEnded:withEvent:] + 660 
    15 UIKit        0x01dcacfa -[UIWindow _sendTouchesForEvent:] + 874 
    16 UIKit        0x01dcb7d6 -[UIWindow sendEvent:] + 792 
    17 UIKit        0x01d896d1 -[UIApplication sendEvent:] + 242 
    18 UIKit        0x01d99b08 _UIApplicationHandleEventFromQueueEvent + 21484 
    19 UIKit        0x01d6d337 _UIApplicationHandleEventQueue + 2300 
    20 CoreFoundation      0x0146f06f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 
    21 CoreFoundation      0x01464b7d __CFRunLoopDoSources0 + 253 
    22 CoreFoundation      0x014640d8 __CFRunLoopRun + 952 
    23 CoreFoundation      0x01463a5b CFRunLoopRunSpecific + 443 
    24 CoreFoundation      0x0146388b CFRunLoopRunInMode + 123 
    25 GraphicsServices     0x050c62c9 GSEventRunModal + 192 
    26 GraphicsServices     0x050c6106 GSEventRun + 104 
    27 UIKit        0x01d71106 UIApplicationMain + 1526 
    28 Vitrine        0x00076cd4 main + 180 
    29 libdyld.dylib      0x0366bac9 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

С уважением, Диого АМАРАЛ

ответ

0

Вы должны, по мнению вы хотите вернуться к, создать IBAction вроде этого:

@IBAction func back(segue:UIStoryboardSegue) { 
     //no code here, unless you want to do something when exiting 
    } 

И тогда, по мнению вы хотите выйти из, связать barButtonItem к выходу (там должен появиться IBAction).

+0

Этот способ работает отлично! Спасибо! –

0

Для добавления стандартной навигации и панель навигации, вы должны использовать UINavigationController. UINavigationController будет «обертывать» другие виды в потоке навигации (стек), и поэтому вам не нужно добавлять UINavigationBar в любые виды.

Если выполнено правильно Back позаботится об автоматическом UINavigationController.

enter image description here

стрелка влево: щёток View Controller следует указать на UINavigationController

1 Segue: вид корневой контроллер = Первый контроллер представления, который будет отображаться.

2nd segue: show. Trigger a show segue и UINavigationController вытолкнут следующий вид. Будет показана обратная ссылка для обратной навигации.

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

UPDATE:

И если вы действительно хотите использовать раскрутку перетекает по разным причинам, здесь отличное объяснение о том, как они работают:

What are Unwind segues for and how do you use them?

+0

Спасибо, это работает, но ... Если хотите только представить модальный способ, как я могу это сделать? Поскольку это происходит так, Навигация всегда появляется. С уважением, Diogo Amaral –

+0

Существует 'segue' под названием' present modally'. Он будет толкать контроллер просмотра «поверх» текущего контроллера. (По умолчанию анимация, летающая снизу). Попробуйте, это потрясающе. :) –

+0

И если я неправильно понял вопрос, это было бы, как уволить его после того, как вы попадете на экран: http://jeffreysambells.com/2014/02/19/dismissing-a-modal-view-using-a- storyboard-segue –

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