2009-11-10 3 views
1
NSArray *test1 = [NSArray arrayWithObjects:@"1",@"2", nil]; 
NSArray *test2 = [NSArray arrayWithObjects:@"1",@"2", nil]; 
NSArray *test3 = [NSArray arrayWithObjects:@"1",@"2", nil]; 

NSLog(@"%d", [test1 count] == [test2 count] == [test3 count]); 

Impression 0. Pourquoi?obj-c Echec de la comparaison des comptages NS

Répondre

6

Je voudrais spéculer que votre premier test [test1 count] == ​​[test2 count] renvoie true (ou 1) mais le deuxième test 1 == [test3 count] échoue car il a 2 éléments. Vous voulez probablement dire ([test1 count] == ​​[test2 count]) & & ([test2 count] == ​​[test3 count]) à la place. Que les tests pour l'égalité en utilisant la propriété transitive - à savoir si A == B et B == C alors A == C.

+1

+1 Je fixais ce code pendant 5 minutes en pensant que quelque chose se sentait mal, mais je ne pouvais pas mettre le doigt dessus. Dans l'intérêt de mon projet, je pense que je ferais mieux de faire quelques papiers aujourd'hui. –

2

[test1 count] == [test2 count] == [test3 count]

évaluerons comme:

[test1 count] == [test2 count] == [test3 count] 
= (int of 2) == (int of 2) == [test3 count] 
= (BOOL of YES) == (int of 2) // Comparing an implicit 1 with 2 so != 
= (BOOL of NO) 
= (int of zero implicit cast)