- ベストアンサー
可変長配列の初期化はできる?エラーの解決方法を教えてください
- iOSでマップアプリを開発している際に、NSMutableArrayからデータを呼び出してCustomAnnotationクラスの初期化を行いたいと思っています。しかし、for文を使用して複数の初期化を行おうとするとエラーが発生します。エラーメッセージは「Variable-sized object may not be initialized」と出力されます。
- このエラーは、可変長配列の初期化ができないことを示しています。つまり、for文や配列のインデックスを使用して可変長配列を初期化することはできないのです。
- 解決策としては、可変長配列の代わりにNSMutableArrayを使用する方法があります。NSMutableArrayは可変長であり、要素を追加・削除することができます。そのため、for文を使用して複数の要素を追加することが可能です。具体的なコード例としては、NSMutableArrayのインスタンスを作成し、for文内で要素を追加する方法です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
なにか問題が発生したとき、その問題の原因が自分自身にあると、最初に思う人間は、むしろ少数であって、コンパイラの欠陥だとか、言語仕様の欠陥と考えたがるのが多数派だというのは、理解できます。たしかに私自身にもそういう傾向はあります。しかしそれは人間の心理の話であって、現実世界の事実は、コンパイラや言語仕様に原因を認められるケースはほとんどなく、99.9%は人為ミスです。 for(int i=0; i<10; i++) { CustomAnnotation *Pin[i] = [[CustomAnnotation alloc] ~~~~~ こういう書式はありえません。 サンプルを示します。 NSMutableArray *testArray = [NSMutableArray array]; for (int i = 0; i < 10; i++) { testArray[i] = [NSNumber numberWithInt: i + 1]; } for (int i = 0; i < 10; i++) { NSLog(@"%d", [testArray[i] intValue]); } これはモダンな書き方で、従来の書式はこちら。 NSMutableArray *testArray = [NSMutableArray array]; for (int i = 0; i < 10; i++) { [testArray addObject: [NSNumber numberWithInt: i + 1]]; } for (int i = 0; i < 10; i++) { NSLog(@"%d", [testArray[i] intValue]); } 以上を参考にしてください。
お礼
お礼が遅くなり申し訳ありません。 丁寧に回答していただきありがとうございます。 ご指摘の通り、自分自身の知識不足から来るミスです。 これから勉強して参ります。 いただいたサンプルや、他サイト様の情報から何とかやりたい動きをさせることができました。 ありがとうございました。