2012-03-01 17 views
0

私はARCを使用して、ライオンのnsmutable配列、xcode 4.3にaddobjectsを追加しようとしています。次は、SIGABRTでプログラムがクラッシュする原因となりますNSMutableArrayのinsertObjectが配列に追加されていません

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10]; 
[myArray insertObject:@"Hello World" AtIndex:5] 

どのようにカスタムオブジェクトを配列の任意のインデックスに追加できますか?

ご協力いただきありがとうございます。

答えて

3

...これを試してみてくださいこの場合は10項目です。

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10]; 
for(int i = 0; i < 10; i++) { 
    [myArray addObject:[NSNull null]]; 
} 

オブジェクトを挿入する場合は、代わりにreplaceObjectAtIndex:withObject:を使用してください。配列のサイズは変更されません。

[myArray replaceObjectAtIndex:5 withObject:@"Hello World"]; 

また、アイテムにアクセスする際に[NSNull null]をチェックする必要があります。

id item = [myArray objectAtIndex:5]; 
if (item != [NSNull null]) { 
    NSString* stringItem = item; 
    // your code here 
} 
+0

ありがとうございました! :-) – inforeqd

4

あなたの配列容量は、作成後、あなたの配列サイズ右が0であるので、それが範囲外ですので、あなたは、インデックス5の要素を挿入することはできません、10ですが。

また、アレイにnilを挿入することはできませんが、プレースホルダとして10個のnilの要素を持つ配列を持つようにしたい場合は、あなたがNSNullを使用する可能性があります:

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10]; 
for (int i = 0; i < 10; i++) { 
    [myArray addObject:[NSNull null]]; 
} 

// then this would work, but it inserts a new element, so your array size will be 11 
// [myArray insertObject:@"Hello World" atIndex:5] 
// to keep array size at 10 use this method: 
[myArray replaceObjectAtIndex:5 withObject:@"Hello World"]; 
1

あなたは要素の修正番号をお持ちの場合配列でNSArrayを使用します。次に、特定の位置のオブジェクトを設定することができます。 NSMutableArrayを使用している場合、そのサイズは0です。NSMutableArrayの5番目の位置に5個の要素を挿入する必要があります。

0

空の配列にオブジェクトを挿入しようとしています。代わりに、オブジェクトを追加しようとします。あなたはCの固定サイズ配列のと同じ方法でNSArrayを使用したい場合は、私は例えば、あなたが配列のサイズのために必要な数の[NSNull null]NSArrayインスタンスを埋める示唆

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:10]; 
[myArray addObject:@"Hello World"]; 
関連する問題