V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
austinchou0126
V2EX  ›  iDev

Storyboard 的 Push Segue 问题

  •  
  •   austinchou0126 · 2014-03-11 22:03:58 +08:00 · 3983 次点击
    这是一个创建于 3911 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假如我有一个ViewController为MainVC,MainVC里两个按钮分别Trigger了两个Push Segue,Push到一个含有WebView的WebViewVC。两个Segue对应不同的Request地址。
    我想做到假如WebView载入了某些地址,那么自动Pop回MainVC,MainVC embedded in NavigationController。
    WebViewVC property如下
    @property (weak, nonatomic) IBOutlet UIWebView *webView;
    @property (weak, nonatomic) UINavigationController *source;
    source属性在MainVC的prepareForSegue时指向MainVC
    WebViewVC收到didFinish事件后判断,然后[self.source.navigationController popViewControllerAnimated: YES]
    结果:
    第一次成功,第二次失败,错误提示:
    nested pop animation can result in corrupted navigation bar
    Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

    于是我改成了[self dismissViewControllerAnimated:YES completion:nil],根本没有反应。
    请问大家应该怎么解决?
    第 1 条附言  ·  2014-03-12 10:01:40 +08:00
    刚测试了一下,webView delegate有个方法,End Loding后会检测URL是否为某个host,如果不是就pop。
    假如push的时候request本来就不是这个host,会直接pop,然后这时候就会报错。
    求解为啥
    第 2 条附言  ·  2014-03-12 12:50:24 +08:00
    测试代码

    in MainViewController

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(100, 100, 50, 100);
    [btn setTitle:@"Click to Push" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(pushVC:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    }

    - (void)pushVC:(id)sender
    {
    SubViewController *sbvc = [[SubViewController alloc] init];
    [self.navigationController pushViewController:sbvc animated:YES];
    }

    In SubViewController
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.navigationController popViewControllerAnimated:YES];
    }

    2014-03-12 12:48:30.772 PushPopTest[1860:60b] nested pop animation can result in corrupted navigation bar
    2014-03-12 12:48:31.125 PushPopTest[1860:60b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

    就是这样的错误
    第 3 条附言  ·  2014-03-12 20:06:57 +08:00
    原因:网速太快。

    你让我情何以堪
    7 条回复    1970-01-01 08:00:00 +08:00
    austinchou0126
        1
    austinchou0126  
    OP
       2014-03-11 22:04:36 +08:00
    再不行我就只能不用Storyboard的Segue,直接代码手写push了。
    offspring
        2
    offspring  
       2014-03-11 22:14:13 +08:00
    @austinchou0126 你直接[self.navigationController popViewControllerAnimated:YES]不就好了么 你到上层去pop干啥...
    austinchou0126
        3
    austinchou0126  
    OP
       2014-03-11 22:15:09 +08:00
    @offspring 同样的问题,所以才想到去上层pop
    offspring
        4
    offspring  
       2014-03-11 22:20:01 +08:00
    @austinchou0126 除非你别的地方写的有问题 要不然是不会pop不了的 错误信息就是说你pop了两次 再好好看看自己写的吧 在webviewVC里直接pop肯定可以的
    austinchou0126
        5
    austinchou0126  
    OP
       2014-03-11 22:43:22 +08:00 via iPhone
    @offspring 好,我明天再看看
    austinchou0126
        6
    austinchou0126  
    OP
       2014-03-12 12:50:51 +08:00
    allenhsu
        7
    allenhsu  
       2014-03-12 16:42:59 +08:00
    为什么在 viewDidLoad 里直接 pop 了?viewDidLoad 的时候 view 还未 appear,即 push 的 animation 未结束,不能 pop。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3438 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.