2012-07-13 69 views
0

我已經看到了有關NSArray的indexOfObjectIdenticalTo:方法的類似問題,但我希望我的問題只會產生簡單的答案。搜索以編程方式構建的字符串是無用的嗎?iOS indexOfObjectIdenticalTo:對字符串不起作用

NSArray* theArray = [[NSArray alloc] initWithObjects:@"John", nil]; 
NSString* searchString1 = @"John"; 
NSString* stringComponent = @"Jo"; 
NSString* searchString2 = [stringComponent stringByAppendingFormat:@"hn"]; 

BOOL testContains1 = [theArray containsObject:searchString1]; 
int testIndex1 = [theArray indexOfObjectIdenticalTo:searchString1]; 
BOOL testContains2 = [theArray containsObject:searchString2]; 
int testIndex2 = [theArray indexOfObjectIdenticalTo:searchString2]; 

在上面的例子,testContains1testContains2都返回相同的值,這是true。但testIndex1testIndex2不同; testIndex1爲0,因爲它在索引0處發現了與預期相同的對象,但不幸的是testIndex2是2147483647(NSNotFound)。

回答

9

文檔約indexOfObjectIdenticalTo:說:

對象被認爲是相同的,如果他們的目的地址相同。

對於具有相同內容但構造不同的對象,顯然不是這種情況。

在這種情況下,您需要使用indexOfObject:,這會爲您提供從isEqual:方法返回YES的對象的最低索引。

+0

謝謝!我混淆了兩種方法,認爲'indexOfObject:'尋找匹配的對象地址,但我應該仔細閱讀文檔。 – 2012-07-14 01:01:08