【发布时间】:2012-01-25 15:47:39
【问题描述】:
当我分析我的代码时,我得到以下逻辑错误:
消息'frame'的接收者是nil并且返回一个'CGRect'类型的值,这将是垃圾。
这两行:
CGRect rectFrame = purchaseCell.lblValue.frame;
CGRect rectFrameBG = purchaseCell.lblValueBG.frame;
代码运行良好,但只是想弄清楚这是在说什么。我做错了吗?
编辑:这是完整的方法:
purchaseCell.lblHeader.font = [UIFont fontWithName:@"AvenirNextLTPro-Regular" size:16];
purchaseCell.lblHeader.text = curField.fieldName;
purchaseCell.lblValue.text = curField.fieldValue;
purchaseCell.lblValueBG.text = curField.fieldValue;
purchaseCell.lblValue.font = [UIFont fontWithName:@"AvenirNextLTPro-Regular" size:16];
purchaseCell.lblValue.backgroundColor = [UIColor clearColor];
purchaseCell.lblValueBG.textColor = [UIColor clearColor];
[purchaseCell.lblValueBG sizeToFit];
[purchaseCell.lblValue sizeToFit];
CGRect rectFrame = purchaseCell.lblValue.frame;
CGRect rectFrameBG = purchaseCell.lblValueBG.frame;
NSLog(@"RectFrame X: %.2f", rectFrame.origin.x);
purchaseCell.lblValue.frame = CGRectMake(rectFrame.origin.x-rectFrame.size.width,rectFrame.origin.y, rectFrame.size.width+14, rectFrame.size.height);
frameSizeWidth = rectFrame.size.width;
purchaseCell.lblValueBG.frame = CGRectMake(rectFrameBG.origin.x-rectFrameBG.size.width,rectFrameBG.origin.y, rectFrameBG.size.width+14, rectFrameBG.size.height);
【问题讨论】:
-
我的猜测:这似乎表明
purchaseCell、purchaseCell.lblValue或purchaseCell.lblValueBG在某些情况下可以是nil,或者至少编译器认为它可能是。在这些情况下,.frame将被发送到可能返回非法值的nil对象。您可能想检查这是否可能(即使它只是一个边界情况)。如果不是,则此警告可能源于编译器预测将采用哪些代码路径的能力有限。