2

私は初心者で、これに対する解決策を準備/監視/検索するために一日中働いています。次のコードは機能しますが、配列に整数を追加するにはどうすればよいですか?

    //this works

    NSArray *array = [NSArray arrayWithObjects:[NSNumber numberWithInt:10],
        [NSNumber numberWithFloat:25.96], @"Hello World", nil]; 

   for (id obj in array)
    NSLog(@"%@", obj);

以下はエラーを返します: 宣言されていない識別子 'obj' の使用

    NSArray *array = [NSArray arrayWithObjects:[NSNumber numberWithInt:10],
       [NSNumber numberWithFloat:25.96], @"Hello World", nil]; 

    for (id obj in array) 
        [array addObject:7];
        NSLog(@"%@", obj);
4

3 に答える 3

6

オブジェクトを動的に追加するには、NSArray ではなく NSMutabbleArray を使用する必要があります。忘れないでください [] と arrayWithObjects は nsarray 専用です。これを試して:

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithInt:10]];
[array addObject:[NSNumber numberWithFloat:25.96]];
[array addObject:@"Hello World"];
[array addObject:[NSNumber numberWithInt:7]];

for (id obj in array) {
    NSLog(@"%@", obj); 
}

このコードをコピーして貼り付けるだけで、必要なオブジェクトで配列が開始され、それらが表示されます。

于 2012-05-11T21:32:44.997 に答える
3

ここにはいくつかの問題があります。

  1. 不変の配列を変更 (変更) しようとしています。やりたいことをするのではNSMutableArrayなく、が必要になります。NSArray(ちなみに、実際のNSArray作成コードは問題ありません。)
  2. 主にコードを区切るfor()中括弧がないため、ループが爆発しています。中括弧がない場合、コンパイラはループの内容として に続く最初の行のみを使用します。forしたがって、あなたNSLog()はループの外にありobj、範囲外です。
  3. addObject:のように行を括弧で囲んでいない理由がわかりません[array addObject:...]。それもコンパイルされましたか?コピー&ペーストのミスですか?
  4. 最後に、 などの Cocoa コレクションにネイキッド整数を追加することはできませんNSArray。コードの前半で適切に行ったことに従う必要があります: [array addObject:[NSNumber numberWithInt:7]].

インデントを構文として使用していたことを考えると、Python (または同様の) のバックグラウンドを持っているのではないでしょうか? その場合、C または Objective-C で効果的にプログラミングするには、思考モードの一部をすばやく調整する必要があります。Cocoaプログラミングの初心者向けの本を入手して、最初から始めることをお勧めします。そうしないと、すぐにイライラしてしまいます。

編集:投稿した後、括弧を追加したことに気付いたので、上記の#3を打ちました。これは、別の重要な注意事項につながります。質問する場合は、失敗した正確なコードをコピーして貼り付けてください。再入力しないでください。

于 2012-05-11T21:28:44.343 に答える
1

これは、次の行のみを考慮する for ループでインデントを使用しているためです。代わりにこれを試してください

     for (id obj in array) {
         [array addObject:[NSNumber numberWithInt:7]];
         NSLog(@"%@", obj); 
     }

ノート

初期化後にオブジェクトを追加する場合は、NSMutableArray を使用する必要があると思います。また、ループするコレクションを変更することはお勧めできません (この場合、ループする配列にオブジェクトを追加し続けるため、ループが終了することはありません)。この行を使用して、配列の変更可能なバージョンを作成できます。

NSMutableArray * mutArray = [NSMutableArray arrayWithArray:array]; 
于 2012-05-11T21:23:08.007 に答える