美文网首页
iOS低版本上block内BOOL类型变量赋值

iOS低版本上block内BOOL类型变量赋值

作者: 学习无底 | 来源:发表于2017-11-29 14:24 被阅读442次

    上周遇到一个bug反馈,说一个按钮的状态不对,没有选中,非常疑惑,测试中没有这个问题。为了还原这个问题,运行在相似的模拟器上,发现果然。源代码如下:

    ZLLViewController *protocolVC = [[ZLLViewController alloc]init];
    // self.param : @property (copy, nonatomic) NSString *signature;
    // ZLLViewController : @property (nonatomic, assign) BOOL nameSigned;
           protocolVC.nameSigned = self.param.signature;
            weakSelf(wself);
            protocolVC.signedBlock = ^(UIImage *image, NSString *signBase64String) {
                wself.param.signature = signBase64String;
                wself.protocolButton.selected = signBase64String.length;
            };
            [self.navigationController pushViewController:protocolVC animated:YES];
    

    signedBlock 调用且signBase64String不为nil时,
    打印了self.protocolButton.selected 的值为NO,protocolVC.nameSigned的值为YES
    改为:

    wself.protocolButton.selected = signBase64String.length ? YES : NO;
    

    self.protocolButton.selected 的值没有问题。在10.x,11.x的系统上没有发现这个问题,8.4版本上确认有这个问题。
    经此判断,这应该是一个系统的bug,不过还是自己写代码不够严谨导致的。

    iOS低版本上block内BOOL类型变量赋值 : 直接赋值YES or NO,不要把对象或者除BOOL外的基本数据类型赋值给BOOL类型变量。

    PS:很尴尬的是,这个问题是在运行在iPad上时发现的,还没有相应的测试机,模拟器运行iPad时,大小折腾了我好久。教训深刻!

    相关文章

      网友评论

          本文标题:iOS低版本上block内BOOL类型变量赋值

          本文链接:https://www.haomeiwen.com/subject/sxiubxtx.html