初始化UIView时避免(void)drawRect

时间:2013-10-30 20:15:17

标签: ios uiview initialization drawrect

通过将我的应用程序调整到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
}

2 个答案:

答案 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
        }
    }
}

另一个观察 - 为什么你的循环硬编码?为什么循环不是基于数组的长度?