通过将我的应用程序调整到iOS7,我在初始化自定义UIView时出现以下错误:Assertion failed: (CGFloatIsValid(x) && CGFloatIsValid(y)),...
。
初始化UIView时,调用drawRect方法并由于缺少另一个ViewController稍后处理的数据而停止工作。 当调用包含UIView的故事板场景时,UIView被初始化。
确保在初始化后没有立即调用drawRect方法的正确方法是什么。
我的UIView drawRect:
方法,其中包含发生错误的行:
- (void)drawRect:(CGRect)dirtyRect{
for (NSInteger i=2; i<=101; i++) {
height = fieldHeight * [[bellCurveArray objectAtIndex:i-1]doubleValue];
CGContextAddLineToPoint(context, x1+t*(i-1), bounds.size.height-y1-height);
//the height is causing the trouble due to the empty bellCurveArray in the early UIView stage
}
答案 0 :(得分:2)
为避免调用drawRect,您可以在init方法中将框架设置为CGRectZero
答案 1 :(得分:2)
根据您的评论,您的drawRect:
实施似乎无法处理尚未设置的数据。这样的事情可能就是你所需要的:
- (void)drawRect:(CGRect)dirtyRect{
if (bellCurveArray.length) {
for (NSInteger i=2; i<=101; i++) {
height = fieldHeight * [[bellCurveArray objectAtIndex:i-1]doubleValue];
CGContextAddLineToPoint(context, x1+t*(i-1), bounds.size.height-y1-height);
//the height is causing the trouble due to the empty bellCurveArray in the early UIView stage
}
}
}
另一个观察 - 为什么你的循环硬编码?为什么循环不是基于数组的长度?