我见过类似关于NSArray的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];
在上面的示例中,testContains1
和testContains2
都返回相同的值,即true
。但testIndex1
和testIndex2
不同; testIndex1
为0,因为它在索引0处找到了与预期相同的对象,但不幸的是testIndex2
是2147483647(NSNotFound)。
答案 0 :(得分:9)
有关indexOfObjectIdenticalTo:
的文档说:
如果对象的对象地址相同,则认为它们是相同的。
对于具有相同内容但构造不同的对象,显然不是这种情况。
在这种情况下,您需要使用indexOfObject:
,这将为您提供从YES
方法返回isEqual:
的对象的最低索引。