2010-02-03 4 views
0

J'ai une sous-classe UIView qui a les éléments suivants dans drawRect:problème dessin en classe UIView personnalisée

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

Je suis connecté à l'intérieur de l'instruction if et cela fonctionne, mais pour une raison quelconque, je reçois toujours dessiné CGContextFillRects à chaque itération de la boucle, même si mon objet tableau actuel est @ "". Je suis assez nouveau pour dessiner, alors s'il vous plaît excusez-moi si je manque quelque chose d'énorme et trivial.

Répondre

3

Vous ne pouvez pas tester l'égalité avec == ou! = Lorsque vous utilisez des objets; vous devez utiliser -isEqualTo :. Par exemple:

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

Chaque objet dans votre tableau est un pointeur vers la mémoire. Même si deux objets ont le même contenu logique (comme une chaîne vide), ils pointent très probablement vers des blocs de mémoire différents. Qu'est-ce que vous voulez faire est de comparer le contenu de ces morceaux de mémoire, ce qui est ce que -isEqualTo: fait.

+0

- [isEqualToString:] est une méthode plus appropriée pour la classe NSString. –

+1

Oui, mais il n'était pas clair que chaque objet du tableau était une chaîne. –

+1

'isEqualTo:' est techniquement destiné aux scripts. La méthode d'égalité générique réelle est '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/Référence/NSObject.html # // apple_ref/occ/intfm/NSObject/isEqual: –

1

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

Questions connexes