上周遇到一个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时,大小折腾了我好久。教训深刻!
网友评论