2010-02-03 28 views
0

我有了在drawRect中下面一个UIView子类:问题定制UIView类绘制

for(int j=0; j<[myArray count]; j++){ 
    if([myArray objectAtIndex:j][email protected]""){  
     [[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即使我当前的数组对象是@“”,也是循环的每一次迭代。

我是相当新的绘画,所以请原谅我,如果我失去了一些巨大而微不足道的东西。

回答

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]; 
    } 
} 

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

+0

- [isEqualToString:]是NSString类更合适的方法。 – 2010-02-03 19:01:43

+1

是的,但并不清楚数组中的每个对象都是一个字符串。 – 2010-02-03 19:35:58

+1

'isEqualTo:'在技术上用于脚本。实际的通用平等方法是'isEqual:'。 http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Protocols/NSComparisonMethods_Protocol/ http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Protocols/ NSObject_Protocol/Reference/NSObject.html#// apple_ref/occ/intfm/NSObject/isEqual: – 2010-02-03 19:38:42

1

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