2011-09-13 136 views
59

我想通过indexOfObject方法得到一个数组的索引,但是当我尝试记录值以测试索引时,我得到一个垃圾值..为了测试目的,我使用的值为{57,56,58..}的索引可以说56从NSArray获取对象的索引?

NSNumber *num = [NSNumber numberWithInteger:56]; 
NSInteger Aindex = [myArray indexOfObject:num]; 
NSLog(@" %d",Aindex); 

我得到的价值是一样的东西2323421。我可能做错了什么?

+0

你真的将它插入到数组中吗? –

+0

**你的myArray包含什么样的数据类型值** –

+0

我正在给数组添加一个NSString值,并将数组对象与一个NSNumber进行比较..没想到这会是一个问题,但最终必须将该对象与一个字符串进行比较值得到它的权利.. – hemant

回答

134

indexOfObject返回的索引将成为您的对象发生的第一个索引。平等使用isEqual方法进行测试。
您获得的垃圾值可能等于NSNotFound
尝试对其进行测试anIndex。您正在查找的号码是不是可能是你的数组中:

NSNumber *num=[NSNumber numberWithInteger:56]; 
NSInteger anIndex=[myArray indexOfObject:num]; 
if(NSNotFound == anIndex) { 
    NSLog(@"not found"); 
} 

或记录阵列的内容,以确保:

NSLog(@"%@", myArray); 
+0

我正在添加一个NSString值数组和比较数组对象与一个NSNumber ..没想到这将是一个问题,但最终不得不比较对象与字符串值,以使其正确.. – hemant

+1

Thx for'NSNotFound' ... –

+0

如果我多次使用同一个对象,该怎么办? –

0

我只是检查。它为我工作很好。检查你的数组是否有特定的数字。如果元素不存在,它将返回这样的垃圾值。

6
NSNumber *num1 = [NSNumber numberWithInt:56]; 
    NSNumber *num2 = [NSNumber numberWithInt:57]; 
    NSNumber *num3 = [NSNumber numberWithInt:58]; 
    NSMutableArray *myArray = [NSMutableArray arrayWithObjects:num1,num2,num3,nil]; 
    NSNumber *num=[NSNumber numberWithInteger:58]; 

    NSInteger Aindex=[myArray indexOfObject:num]; 

    NSLog(@" %d",Aindex); 

它给出正确的输出,可能是你做了一些错误的存储对象在你的数组。

+0

干得好.....工作! –

38

民间,

当阵列的indexOfObject方法不返回一个“垃圾”值中没有找到的对象。如果找不到该项目,许多系统将返回索引-1。

但是,在IOS上 - 因为indexOfObject返回一个UNSIGNED int(又名NSUInteger),所以返回的索引必须大于或等于零。因为'零'是一个有效的索引,所以没有办法向调用者指示该对象没有被找到 - 除了返回一个我们都可以测试的约定常量值。这个恒定的价值被称为NSNotFound。

的方法:

- (NSUInteger)indexOfObject:(id)anObject; 

将返回NSNotFound如果对象在阵列中没有。 NSNotFound是一个非常大的POSITIVE整数(通常是1减去平台上的最大整数)。

+0

@joe如果你CMD +点击NSNotFound,你会发现它被定义为'enum {NSNotFound = NSIntegerMax};'。我知道NSIntegerMax和NSUIntegerMax都是正数,但是使用NS ** U ** IntegerMax是否更合理?因为它用于返回NSUInteger的函数中?另外,如果我正在搜索放置在数组的索引NSIntegerMax中的对象,该怎么办?我不会被欺骗,认为该对象是NSNotFound? – Pwner

5

试试这个:

NSArray的indexOfObject:方法。比如下面:

NSUInteger fooIndex = [someArray indexOfObject: someObject]; 
0

indexOfObject methord会得到相应的字符串的索引数组如果字符串是像@“测试”,你会发现像@“TEST”现在,这将retun像索引长号

1

如果您使用Swift和可选项,请确保它们已解包。您无法搜索可选对象的索引。