Ale*_*ßen 2 iphone ios state-restoration ios7
我使用SDK提供的状态恢复.
我从故事板中加载了所有视图控制器.初始视图控制器以模态方式显示另一个视图控制器 两者都有恢复标识符.
恢复工作正常但是:当我在模态呈现的视图控制器中并按下主页(保存状态).然后重新打开应用程序并恢复状态,以下情况发生:
一瞬间,我看到初始视图控制器,然后屏幕变为我实际想要看到的模态控制器.
为什么会这样?缓存目录中的快照确实显示了正确的屏幕(来自显示的视图控制器).
您可以使用此项目重现该问题.在初始视图控制器的viewDidAppear方法中添加断点,在恢复状态时,您将在屏幕和视图层次结构中看到初始视图控制器的视图:
(lldb) po [[UIWindow keyWindow] recursiveDescription]
<UIWindow: 0x155607f0; frame = (0 0; 320 480); autoresize = W+H; gestureRecognizers = <NSArray: 0x15560d20>; layer = <UIWindowLayer: 0x1555f4f0>>
| <UIView: 0x15542ad0; frame = (0 0; 320 480); autoresize = RM+BM; layer = <CALayer: 0x15542a70>>
| | <UIButton: 0x155432d0; frame = (137 269; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x15543b30>>
| | | <UIButtonLabel: 0x15663dd0; frame = (0 6; 46 18); text = 'Button'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1566da20>>
| | <_UILayoutGuide: 0x15542b60; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x15542fe0>>
| | <_UILayoutGuide: 0x15541060; frame = (0 480; 0 0); hidden = YES; layer = <CALayer: 0x155410d0>>
Run Code Online (Sandbox Code Playgroud)
如果检查视图控制器层次结构,则模态显示的视图控制器不在初始视图控制器呈现的属性中:
(lldb) po [[[UIWindow keyWindow] rootViewController] presentedViewController]
nil
Run Code Online (Sandbox Code Playgroud)
断点是在(理论上)状态恢复之后.但稍后它将被正确设置.
小智 5
这个问题似乎发生在使用故事板时,你让框架[window makeKeyAndVisible]为你调用,并且它在恢复后发生.
如果您将下一行添加到application:willFinishLaunchingWithOptions:
[self.window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
它会解决它.
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |