iOS6中关于切换(segue)viewController产生的问题

    在学《iOS5应用开发 入门经典》这本书的时候发现的一个问题,在第12章中,有一个场景切换的例子。由于需要记录viewController切换时的信息,这个例子使用了手动调用了viewController的performSegueIndentifier: id sender:sender方法,在类中声明了一个属性dateChooserVisible,用于判断另一场景是否显示,代码如下:

- (IBAction)showDateChooser:(id)sender {

    if (self.dateChooserVisible!=YES) {

        [self performSegueWithIdentifier:@"toDateChooser" sender:sender];

        self.dateChooserVisible=YES;

    }

}

    这是一个切换场景的按钮的action。

    在切换到另一场景(其控制器叫dateChooserController)时,作者重写了viewWillAppear方法,并在其中重新将dateChooserVisible变量置为NO:

- (void)viewWillAppear:(BOOL)animated

{

    ((ViewController *)self.delegate).dateChooserVisible=NO;

}

    然而,在这个场景返回之后,再次点击切换场景按钮,却不能切换了。经过对dateChooserVisible的跟踪发现,在action中,if语句在第一次判断dateChooserVisible时,进入下面的代码块,执行performSegueIndentifier: id sender:sender方法后,立即跳到了viewWillAppear方法中(另一个controller的),在执行完Appear相关的函数后,又返回到if的代码块内。因此,实际上dateChooserVisible被修改顺序是NO(初始化)->NO(viewWillAppear里的语句)->YES(if代码块最后一句)可以推测:

    在进行场景切换时,系统先对要切换的场景执行appear相关的操作,直到操作完成,才将函数返回给调用者(也就是说该操作并非异步的),不知道此处是作者失误还是iOS6的新机制。(因为教材是iOS5的),我的解决办法是将修改NO的语句移至即将返回场景之前:

- (IBAction)dismissDateChooser:(id)sender {

    ((ViewController *)self.delegate).dateChooserVisible=NO;

    [self dismissViewControllerAnimated:YES completion:nil];

}


    毕竟这样的操作更贴近dateChooserVisible本来的含义吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值