放松不起作用
Unwind does not work
我正在学习 Swift,我开设了 DesignCode 课程,现在我正在尝试创建一个应用程序来改进我所学的知识。
这就是我所做的:
我创建了 UIViewController 并对 UITableViewController 执行了 segue;
在我嵌入导航栏的 UITableViewController 中,我在其中创建了一个 'Back' 栏按钮项;
我 link 这个 'Back' 退出,通过 'Spring'.
执行 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
此致,
迪奥戈·阿马拉尔
要添加标准导航和导航栏,您应该使用 UINavigationController
。 UINavigationController
将 "wrap" 导航流(堆栈)中的其他视图,因此您无需在任何视图上添加任何 UINavigationBar
。
如果正确实施,Back
会自动由 UINavigationController
处理。
左箭头:Inital View Controller 应指向 UINavigationController
第一个 segue:根视图控制器 = 将显示的第一个视图控制器。
第二次转场:show
。触发 show
segue,UINavigationController 将推送下一个视图。后退 link 将显示后退导航。
您可以使用 show segue 链接任意多的视图,如果需要,您可以从同一个视图控制器中获得多个 show
segue。
更新:
如果您出于不同的原因真的想使用展开转场,这里有一个关于它们如何工作的很好的解释:
What are Unwind segues for and how do you use them?
你必须在你想要返回的视图中创建一个像这样的 IBAction:
@IBAction func back(segue:UIStoryboardSegue) {
//no code here, unless you want to do something when exiting
}
然后,在您要退出的视图中,link 您的 barButtonItem
到出口(IBAction 应该出现在那里)。
我正在学习 Swift,我开设了 DesignCode 课程,现在我正在尝试创建一个应用程序来改进我所学的知识。
这就是我所做的:
我创建了 UIViewController 并对 UITableViewController 执行了 segue;
在我嵌入导航栏的 UITableViewController 中,我在其中创建了一个 'Back' 栏按钮项;
我 link 这个 'Back' 退出,通过 'Spring'.
执行 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
此致, 迪奥戈·阿马拉尔
要添加标准导航和导航栏,您应该使用 UINavigationController
。 UINavigationController
将 "wrap" 导航流(堆栈)中的其他视图,因此您无需在任何视图上添加任何 UINavigationBar
。
如果正确实施,Back
会自动由 UINavigationController
处理。
左箭头:Inital View Controller 应指向 UINavigationController
第一个 segue:根视图控制器 = 将显示的第一个视图控制器。
第二次转场:show
。触发 show
segue,UINavigationController 将推送下一个视图。后退 link 将显示后退导航。
您可以使用 show segue 链接任意多的视图,如果需要,您可以从同一个视图控制器中获得多个 show
segue。
更新:
如果您出于不同的原因真的想使用展开转场,这里有一个关于它们如何工作的很好的解释:
What are Unwind segues for and how do you use them?
你必须在你想要返回的视图中创建一个像这样的 IBAction:
@IBAction func back(segue:UIStoryboardSegue) {
//no code here, unless you want to do something when exiting
}
然后,在您要退出的视图中,link 您的 barButtonItem
到出口(IBAction 应该出现在那里)。