我有一个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,即使我当前的数组对象是@“”。
我对画画很新,所以如果我错过了一些巨大而微不足道的东西,请原谅。
答案 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:@""]) {