2011-09-13 133 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和可選項,請確保它們已解包。您無法搜索可選對象的索引。