2012-02-13 63 views
1

我是新的Obj C編程,所以我將從頭開始 我有一個NSNumber和NSString元素的數組,我想將NSString elems替換爲NSNumber elems。我決定使這與建設得到新的NSMutableArray所有元素值和NSMutableIndexSet他們的索引,但是當我做這個我遇到了麻煩,在這裏,我告訴你我的代碼和日誌。Objective-C:在索引數組中的對象

NSArray *oneMoreStack = [program copy]; 
NSLog(@" stack=%@",oneMoreStack); 
NSLog(@" show me index ind=%@",[oneMoreStack indexOfObject:@"x"]); 
NSMutableIndexSet *myVarIndexesSet; 
NSMutableArray *myVarsArray; 


for (id myVarConst in oneMoreStack) { 
    if([myVarConst isKindOfClass:[NSString class]]) 
    { 
     if([myVarConst isEqualToString:@"x"]){ 
      [myVarsArray addObject:myVarConst]; 
      NSLog(@"obj x=%@",myVarConst); 
      [myVarIndexesSet addIndex:[oneMoreStack indexOfObject:myVarConst]]; 
      NSLog(@"ind x=%@",[oneMoreStack indexOfObject:myVarConst]); 

     } 
} 

當我運行它日誌顯示此:

Calculator[6306:f803] stack=(
    x, 
    2, 
    "+" 
) 
Calculator[6306:f803] show me index ind=(null) 
Calculator[6306:f803] obj x=x 
Calculator[6306:f803] ind x=(null) 
then crash [NSMutableArray replaceObjectsAtIndexes:withObjects:]: index set cannot be nil 

所以,我的問題是,爲什麼[oneMoreStack indexOfObject:myVarConst]回報null?我該如何解決它?謝謝。 我之前沒有提到這個代碼,因爲認爲問題在獲取索引。

以前的代碼部分之後去這一部分:與錯誤報告我之前提到崩潰後

[stack replaceObjectsAtIndexes:[myVarIndexesSet copy] withObjects:[myVarsArray copy]]; 

。謝謝。

回答

4

[oneMoreStack indexOfObject:myVarConst]返回一個NSUInteger,一個原始類型,而不是一個對象。

在你的NSLog中,你使用的是%@,它表示「嘿,把這個對象作爲參數傳遞,調用-description並打印出來」。幸運的是,你傳入的NSUInteger恰好爲0,NSLog認爲它是一個空對象,並且你沒有崩潰。如果對-indexOfObject:的調用返回非0,那麼您可能會崩潰。

試試這個:

// For iOS 
NSLog(@" show me index ind=%u", [oneMoreStack indexOfObject:@"x"]); 

// For 64-bit and 32-bit Mac OS X 
NSLog(@" show me index ind=%lu", (unsigned long)[oneMoreStack indexOfObject:@"x"]); 

您可以瞭解在更多的字符串格式: Formatting String Objects

+0

是的,我不認爲這件事,現在登錄秀我的索引,但出現了另一個問題,如果一切正常的索引,爲什麼日誌中的錯誤信息是「終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:'* ** - [NSMutableArray replaceObjectsAtIndexes:withObjects:]:索引集不能爲零我給索引集添加索引時出錯了。謝謝。 – 2012-02-13 23:36:56

+0

對不起,我沒有看到提及的崩潰。你可以用你調用的代碼更新你的qustion - [NSMutableArray removeObjectsAtIndexes:], - [NSMutableArray replaceObjectsAtIndexes:withObjects:],或者 - [NSMutableArray insertObjects:atIndexes:]?謝謝! – iccir 2012-02-14 00:03:09

+0

感謝您的幫助,我編輯問題 – 2012-02-14 05:45:22

相關問題