MKMapkitの緯度経度を配列から呼びたい

このQ&Aのポイント
  • Objective-cで開発を行っている初心者が、MKMapkitを使って地図上にピンを立てる位置情報をNSMutableArrayから呼び出す方法について質問しています。
  • 配列を作成し、緯度経度の情報をNSNumber型で追加した後、CustomAnnotationクラスのインスタンスを作成し、そのインスタンスを使ってピンを立てようとしていますが、'CLLoactionDegrees'に'CLLocationCoordinate2DMake'の引数としてid型が渡されているためエラーが発生しています。
  • 緯度経度の引数はdouble型であるため、NSNumberからそのまま渡すことはできません。NSNumberのdoubleValueメソッドを使用して緯度値を取得し、CLLocationCoordinate2DMakeの引数に渡す必要があります。
回答を見る
  • ベストアンサー

MKMapkitの緯度経度を配列から呼びたい

Objective-cで開発を行っている初心者です。 最近、MKMapkitを使って地図上にピンを立てられるようになったのですが、ピンを立てる位置情報をNSMutableArrayから呼んでこようとしたところつまづいてしまいました。 [Latitude addObject:[NSNumber numberWithDouble:35]]; [Latitude addObject:[NSNumber numberWithDouble:36]]; // CustomAnnotationクラスの初期化(インスタンス化) CustomAnnotation *Pin = [[CustomAnnotation alloc] initWithLocationCoordinate:CLLocationCoordinate2DMake(Latitude[0], 139.763153) title:@"テスト" subtitle:@"test"]; 以上の部分で、"Passing 'id' to parameter of incompatible type 'CLLocationDegrees' (aka 'double')"のエラーが・・・。 latitude,longitudeの型を調べたところdouble型であるとあったのでそのようにして配列をつくったのですが、まだなにかしなければならないことがあるのでしょうか? 初歩的な質問かとは思いますが、どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

NSMutableArrayクラスの配列要素はid型であり、double型ではありません。 配列要素を使用する際は、以下のようにしてdouble型に戻してやる必要があります。 ((NSNumber *)Latitude[0]).doubleValue 使用頻度が高いなら、以下のようなマクロを定義して、それで変換してもよいと思います。 #define numberToDouble(number) (((NSNumber *)(number)).doubleValue) ↓ numberToDouble(Latitude[0])

katsuo777
質問者

お礼

いつも丁寧にありがとうございます。 [Latitude addObject:[NSNumber numberWithDouble:35]];のように格納するだけではダメなのですね・・・勉強になりました。 使用頻度は高くなると思うので、下の方の方法で実践してみたいと思います。

関連するQ&A

  • 可変長配列の初期化

    いつもお世話になっております。 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 と出ているのですが、可変長配列の初期化はできないのでしょうか・・・。 またできるとしたらどのような方法があるのでしょうか。 どうかよろしくお願いします。

  • メモリの解放について

    メモリの解放について 言語はObjective-Cなのですが、(おそらくCでも考え方は同じだと思います。) 以下のような場合はきちんとメモリが解放されるのでしょうか? --- ヘッダ内 NSMutableArray *arr; --- - (void) test { arr = [[NSMutableArray alloc] initWithCapacity:1]; NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] init]; [myDictionary setObject:@"abc" forKey:@"memo"]; [myDictionary setObject:[NSNumber numberWithInt:1] forKey:@"suuji"]; [arr addObject:myDictionary]; } - (void)test2 { [arr release]; } クラス変数 arr をtest という関数内で初期化して、辞書クラスを格納しています。 test2 という関数が呼ばれたときに arr を release しているのですが、 この場合は、中に格納した辞書クラス達も解放されているのでしょうか? それとも中身を一度取り出して、それぞれにreleaseしないといけないんでしょうか? ちなみにiPhoneSDK上の話です。 ガベコレがないという噂なので、Java上がりの自分にはさっぱりなのです。。。 よろしくお願いしますmm

  • Objective-C for文でのインスタンス

    既出の質問と類似してますが、解決しないので質問します。 Objective-CのNSMutableArrayを使いラベルを複数個作りならべたいのですが、 変数iを使ってラベルに番号をつける方法がわかりません。 今のコードは NSMutableArray *tiles = [NSMutableArray array]; for( int i=0; i<25; i++ ){ UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0,0, tileSize,tileSize)]; label.text=[NSString stringWithFormat:@"%d",i]; [tiles addObject:label]; [self.view addSubview:label]; } です。 これを UILabel *label%d,i = [[UILabel alloc]initWithFrame:CGRectMake(0,0, tileSize,tileSize)]; のようにして、 label0、lable1、label2、label3・・・・ というように生成するにはどうしたらいいですか? Objective-C初心者です。 よろしくお願いします。

  • [再]objective-c 描画処理について

    前回質問させて頂きましたが、まだ抜け出せていないので教えて下さい。 ↓↓↓ -------------------------------------------------------------------------------------------------------------- 初心者ですが、iPhoneアプリを作成しています。 画像を並べてスクロールできるように配列で描画処理を行ないたいのですが、うまくいきません。 今のところのコードはこんな感じです↓ - (void)viewDidLoad { [super viewDidLoad]; NSMutableArray* imageList = [NSMutableArray array]; for (int i=1; i < 20; i++) { UIImage* image = [UIImage imageNamed: [NSString stringWithFormat:@"%d.jpg", i+1]]; [imageList addObject:image]; } MyImageView* imageView = [[MyImageView alloc] initWithImage:imageList]; scrollView.contentSize = imageView.bounds.size; [scrollView addSubview:imageView]; [imageView release]; } どなたか分かる方、教えて頂けますよう宜しくお願いします。 -------------------------------------------------------------------------------------------------------------- ↓ NSArray *initWithImage;と引数で渡しましたが、 「MyImageView* imageView = [[MyImageView alloc] initWithImage:imageList];」 の部分で、「Incompatible pointer sending 'NSMutableArray *' to parameter of type 'UIImage *'」とエラー表示され、実行すると、 「Tread1 : Program received signal: "SIGABRT"」で落ちてしまいます。

  • [objective-C]配列について

    はじめまして。 objective-C、cocos2dについての質問です。 iPhoneアプリを勉強しながら作り始めたのですが詰まってしまい、できればご助力をお願いしたいと思い質問させていただきました。 cocos2dというフレームワークを使用し簡単なRPGを作りたいと考えております。 そこでキャラクターのステータスを配列に格納し、どのシーンからも参照したいのですが、どうしてもうまくいきません。 別クラスでインスタンス変数を作り、それを利用して配列を作成する方法で実装しようとしており、実際のコードは以下の通りになります。 ---------------------------------- <Character.h> @interface Character : NSObject{ NSInteger characterStateAtk_; ・(Def、Hpなど) ・ } @property (nonatomic, assign) NSInteger characterStateAtk;  ・  ・ @end <Character.m> #import "Character.h" @implementation Character @synthesize characterStateAtk = characterStateAtk_;  ・  ・ @end キャラクターステータス生成部分 <CreateScene.h> @interface CreateScene : CCScene { NSMutableArray* characterStateArray_; } @property (nonatomic, assign) NSMutableArray *characterStateArray; @end <CreateScene.m> @interface CreateScene() - (void) pressReloadButton:(id)sender; - (void) createCharacterState; @end @implementation CreateScene @synthesize characterStateArray = characterStateArray_; - (void) dealloc{ [self.characterStateArray release]; [super dealloc]; } - (void) createCharacterState{ self.characterStateArray = [NSMutableArray array]; Character* priState = [[[Character alloc]init] autorelease]; priState.characterStateAtk = random() % 5 + 5; ・ ・ [self.characterStateArray addObject:priState]; } (その他の処理) - (void) pressReloadButton:(id)sender{ [self createCharacterState];  (ここでcharacterStateArrayを取得して表示したい) } ---------------------------------- 最初は、 NSInteger x; x = [[self.characterStateArray objectAtIndex:0]intValue]; で取得しようとしたのですがエラーとなり実行できませんでした。 (調べていくうちにobjective-Cでは配列の中身はオブジェクトしか使えないという事を知りました) プログラム中の(ここでcharacterStateArrayを取得して表示したい)の部分について、実装方法や考え方についてご助言をいただけないでしょうか? よろしくお願いいたします。

  • Objective-Cクラス変数インスタンス変数

    現在iPhoneアプリを作成するために、Objective-Cの勉強をしています。しかしそこでわからないことがあり、質問させていただきました。 それは私がインスタンス変数(メンバ変数)を宣言してつかっているつもりなのですが、クラス変数の様な動きをするのです。 具体的にコードで説明します。 @implementation Main : NSObject - (void)hello{ [[Hoge alloc]init]; [[Hoge alloc]init]; } @end @implementation Hoge : NSObject NSNumber *i; - (id)init{ [super init]; NSLog(@"%d",i.intvalue); i = [NSNumber numberWithInt:123]; return self; } @end 出力結果 null 123 今手元にソースがないので正確ではないかもしれませんが、こんな感じです。hファイルにはとくになにもかいてません。 このソースの動きはmainでHogeクラスのインスタンスを二回作成することによって、initを二回呼んでいます。 疑問点は出力結果の挙動が予想外なことです。私としてはインスタンス作成時のiは初期化されていないため、 出力結果 null null になるのを期待しています。しかし二回目のinitでは前回に作成した123というデータが引き継がれています。この挙動はiはインスタンス変数ではなく、クラス変数のようにみえます。 しかしObjective-Cではクラス変数は存在しないとどっかのサイトに書いていました。 以上が質問です。なにかお気づきになった点があればごかいとういただけると幸いです。

  • 緯度・経度について

    緯度と経度についての質問です。 北に行くにしたがって 経度1度あたりの距離は小さくなっていきますよね では、 緯度は北に行くにしたがって1度あたりの距離は変わるものなのでしょうか? 地球が楕円であることを考えると緯度1度あたりの距離は変わるような気がするのですけど… もし変わるのであれば具体的な数字(赤道付近なら??東京付近なら??北極点付近なら…)も教えてください。 よろしくお願いします。

  • 緯度経度について

    緯度経度について ここにある1つの緯度経度情報があります。 それに方位(16方位まで)と距離を与えて、もう1つの緯度経度情報を求めたいのですが、計算式などがのっていて参考になるサイトとかってありませんか? 宜しくお願いします。

  • 緯度経度の読み方教えてください。

    グーグルマップで緯度経度を調べました。 そしたら下記のような表示が出たのですが、どう読めばよろしいのでしょうか? 37.899720076872754, 140.10395407676697

  • 緯度 経度

    ある地点の緯度、経度はどのようにすれば分かるのでしょうか? 例えば、東京都千代田区永田町1-10-1

専門家に質問してみよう