プロが教えるわが家の防犯対策術!

いつもお世話になっております。
iOSで開発を勉強中の者です。

マップアプリを開発しており、NSMutableArrayからデータを呼び出して以下のようにCustomAnnotationクラスの初期化を行っていました。

CustomAnnotation *Pin1 = [[CustomAnnotation alloc] initWithLocationCoordinate:CLLocationCoordinate2DMake(numberToDouble(Latitude[1]), (numberToDouble(Longitude[1])) title:Title[1] subtitle:Subtitle[1]];

これを、for文を使って複数一度に初期化を行おうとしたのですが、エラーが出てしまいました。
コードは下のようになっています。

for(int i=0; i<10; i++) {

CustomAnnotation *Pin[i] = [[CustomAnnotation alloc] initWithLocationCoordinate:CLLocationCoordinate2DMake(numberToDouble(Latitude[i]), (numberToDouble(Longitude[i]))) title:Title[i] subtitle:Subtitle[i]];

}

Variable-sized object may not be initialized と出ているのですが、可変長配列の初期化はできないのでしょうか・・・。
またできるとしたらどのような方法があるのでしょうか。

どうかよろしくお願いします。

A 回答 (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]);
}

以上を参考にしてください。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。
丁寧に回答していただきありがとうございます。

ご指摘の通り、自分自身の知識不足から来るミスです。
これから勉強して参ります。

いただいたサンプルや、他サイト様の情報から何とかやりたい動きをさせることができました。
ありがとうございました。

お礼日時:2014/07/29 15:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!