2012-02-13 38 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はそれがnullオブジェクトだと思って、あなたはクラッシュしていません。 -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 '、reason:' * ** - [NSMutableArray replaceObjectsAtIndexes:withObjects:]:インデックスセットをnilにすることはできません。ありがとう。 –

+0

申し訳ありませんが、私はクラッシュの言及を見ませんでした。あなたは、あなたが呼んだ場所、つまり[NSMutableArray removeObjectsAtIndexes:]、 - [NSMutableArray replaceObjectsAtIndexes:withObjects:]、または - [NSMutableArray insertObjects:atIndexes:]であなたの質問を更新できますか?ありがとう! – iccir

+0

助けてくれてありがとう、私は質問を編集する –

関連する問題