2010-02-03 62 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:@""]) {