【发布时间】:2011-02-23 22:13:47
【问题描述】:
我一直在绞尽脑汁试图找出我正在开发的应用程序的 iPad 部分中的一个小错误。这与这篇文章中的问题有关:
iPad SplitViewController Strange Behaviour
实际上,我应该说这是完全相同的问题。但是,那里给出的唯一解决方案对我不起作用,因为我的应用程序有一个主菜单,当按下正确的按钮时,它会切换到我的 UISplitViewController 的视图。在按下按钮之前,不会创建控制器及其包含的视图控制器。因此,我不能在调用 [window makeKeyAndVisible] 之前设置控制器的委托,因为这在我的主菜单加载时已经完成了。
现在,我在委托的 willHideViewController 函数中添加了一些 NSLog 调用,如下所示:
NSLog(@"Will hide popover view controller!");
NSLog(@"self=%p",self);
NSLog(@"%@",detailPad.tbToolbar);
当我在 iPad 上以纵向模式启动应用程序并单击以切换到拆分视图控制器时,确实调用了委托的 willHideViewController,但是当它完成时,我的详细视图中留下了一个空的工具栏.奇怪的是,第三个 NSLog 调用,它应该输出有关详细视图控制器工具栏的信息,而是吐出(null)。这有点奇怪,因为前面的代码设置了工具栏的项目,并且这段代码不会引发单个异常,即使工具栏显然不存在。
[Session started at 2011-02-23 16:16:59 -0500.]
2011-02-23 16:17:02.626 TEST[33835:207] Will hide popover view controller!
2011-02-23 16:17:02.628 TEST[33835:207] self=0x5351bc0
2011-02-23 16:17:02.629 TEST[33835:207] (null)
2011-02-23 16:17:14.487 TEST[33835:207] Will hide popover view controller!
2011-02-23 16:17:14.488 TEST[33835:207] self=0x5351bc0
2011-02-23 16:17:14.490 TEST[33835:207] <UIToolbar: 0x56201a0; frame = (0 0; 703 44); autoresize = W+BM; layer = <CALayer: 0x5620260>>
2011-02-23 16:24:52.158 TEST[33835:207] Will hide popover view controller!
2011-02-23 16:24:52.159 TEST[33835:207] self=0x5351bc0
2011-02-23 16:24:52.160 TEST[33835:207] <UIToolbar: 0x56201a0; frame = (0 0; 703 44); autoresize = W+BM; layer = <CALayer: 0x5620260>>
如您所见,后续日志显示工具栏运行良好,而且我们知道在所有情况下调用都来自同一个对象。这些后来的调用只是来自旋转到横向然后再回到纵向,所以它肯定也是同一个细节视图控制器。
所以我的问题是:什么会导致工具栏第一次返回为空,但在除了旋转 iPad 什么都不做之后才能正常工作,我能做些什么来解决它?
提前致谢, 瑞恩
【问题讨论】:
标签: ipad uisplitviewcontroller uitoolbar