在自定义UIView类中绘制问题

时间:2010-02-03 18:53:02

标签: iphone core-graphics

我有一个UIView子类,在drawRect中有以下内容:

for(int j=0; j<[myArray count]; j++){
    if([myArray objectAtIndex:j]!=@""){    
        [[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1] set];
        CGContextFillRect(context, CGRectMake(55+(20*j),10,15,5));
        [[UIColor blackColor] set];
        [[myArray objectAtIndex:j] drawAtPoint:CGPointMake(55+(20*j),3+) withFont:myFont];
    }
}

我已经记录了if语句并且它可以工作,但由于某种原因,我仍然在循环的每次迭代中得到CGContextFillRects,即使我当前的数组对象是@“”。

我对画画很新,所以如果我错过了一些巨大而微不足道的东西,请原谅。

2 个答案:

答案 0 :(得分:3)

使用对象时,无法使用==或!=进行相等性测试;你需要使用-isEqualTo:。例如:

for(int j=0; j<[myArray count]; j++){
    if(![[myArray objectAtIndex:j] isEqualTo: @""]){    
        [[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1] set];
        CGContextFillRect(context, CGRectMake(55+(20*j),10,15,5));
        [[UIColor blackColor] set];
        [[myArray objectAtIndex:j] drawAtPoint:CGPointMake(55+(20*j),3+) withFont:myFont];
    }
}

数组中的每个对象都是指向内存的指针。即使两个对象具有相同的逻辑内容(例如空字符串),它们也很可能指向不同的内存块。你想要做的是比较那些内存块的内容,这是-isEqualTo:的作用。

答案 1 :(得分:1)

if (![[myArray objectAtIndex:j] isEqualToString:@""]) {