2011-02-24 1 views
2

このNSArray(labelArray)にオブジェクトを追加しようとしていますが、何らかの理由で毎回NSLogに(null)として返され、カウントは0のままです。なぜこのNSArrayは機能しませんか?

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)]; 
label.text = @"text"; 
[self.view addSubview:label]; 
[labelArray addObject:label]; 
NSLog(@"%@", labelArray); 
[label release]; 
+1

'NSMutableArray * labelArray'を' init'する場所にコードを表示できますか? – Richard

+0

xcode関連ではありません。タグ[xcode]の使用状況を確認してください:http://stackoverflow.com/tags/xcode/info – vikingosegundo

答えて

12

NSArrayは不変です。 -addObject:に電話する場合は、NSMutableArrayを使用してください。 labelArrayNSArrayの場合、クラッシュするはずです。クラッシュしない場合は、おそらくnilであり、初期化していません。

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)]; 
label.text = @"text"; 
[self.view addSubview:label]; 

if (labelArray == nil) { 
    labelArray = [[NSMutableArray alloc] init]; 
} 

[labelArray addObject:label]; 
NSLog(@"%@", labelArray); 
[label release]; 
2

アレイ内のデータを変更する場合は、NSMutableArrayを使用する必要があります。 NSArrayは静的配列の作成にのみ使用できます。

0

あなたはおそらくもNSArrayのが「addObjext」に応答しないことがあり旨のコンパイラからのメッセージが表示されます。意志は仕事いくつかのコード。これは、使用しているオブジェクトが要求されたセレクタ(メソッド)を実行しないというあなたの手掛かりです。この場合、不変オブジェクトを変更しようとしていますが、これはうまくいかないでしょう。あなたはNSMutableArrayを使う必要があります。私はあなたがアップルのドキュメントの違いを読んでお勧めします。

0

以下のコードをテストしました。 lableが追加された後のカウントは1です。

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(howFarAlong, howFarDown, 50, 70)]; 
    label.text = @"text"; 
    [self.view addSubview:label]; 

    NSArray *labelArray = [NSArray arrayWithObject:label]; 
    NSLog(@"Count: %d", labelArray.count);