web-dev-qa-db-ja.com

カスタムの緯度/経度での新しいCLLocationCoordinate2Dの作成

ハングアップするのは非常に単純なことのように思えるので、これを尋ねるのは気分が悪いですが、私はできる限りすべての関連リソースを調べ、他の人が使用しているソリューションを見た多くの組み合わせを試しました何も機能していません...

XMLの座標の緯度と経度を受け取って解析し、それをプロットする配列に格納するXMLを反復処理しようとしています。

私の問題は、使用するタイプ、キャスト方法、あなたが持っているものに関係なく、常にXcodeが何らかの問題を見つけることです。

私の.hファイルの関連部分:

CLLocationCoordinate2D Coord;
CLLocationDegrees lat;
CLLocationDegrees lon;

@property (nonatomic, readwrite) CLLocationCoordinate2D Coord;
@property (nonatomic, readwrite) CLLocationDegrees lat;
@property (nonatomic, readwrite) CLLocationDegrees lon;

私の.mファイルの関連部分:

else if ([elementName isEqualToString:@"Lat"]) {
        checkpoint.lat = [[attributeDict objectForKey:@"degrees"] integerValue];
}
else if ([elementName isEqualToString:@"Lon"]) {
    checkpoint.lon = [[attributeDict objectForKey:@"degrees"] integerValue];
}
else if ([elementName isEqualToString:@"Coord"]) {
    checkpoint.Coord = [[CLLocation alloc] initWithLatitude:checkpoint.lat longitude:checkpoint.lon];
}

私が取得している現在のエラーは、「互換性のない型 'idから' CLLocationCoordinate2Dに割り当てています」です。初期化関数の戻り値が間違っていることを意味しますが、組み込み関数以来、理由がわかりません...

私はまた、他の誰かがやっているのを見た私にとって最も意味のあることを試みました:

checkpoint.Coord = CLLocationCoordinate2DMake(checkpoint.lat, checkpoint.lon);

すぐにエラーが返されることはありませんが、ビルドして実行しようとすると次のようになります。

アーキテクチャi386の未定義シンボル: "_CLLocationCoordinate2DMake"、参照先:-[XMLParser parser:didStartElement:namespaceURI:qualifiedName:attributes:] in Checkpoint.o ld:symbol(s)not found for i386 collect2:ld return 1 exit status

私はこの時点で非常にアイデアが不足しているので、正しい方向への助け/説明/ナッジは非常に高く評価されます。

31
Karoly S

あなたにとって最も意味のあるもの(CLLocationCoordinate2DMake)は正しいです。 CoreLocationフレームワークをプロジェクトに含めるのを忘れました。

そして、他の人が指摘したように、ファイルの緯度経度はおそらく整数ではありません。

50
Firoze Lafeer

私がやったことは:最初にCLLocationCoordinate2Dを作成します:

CLLocationCoordinate2D c2D = CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude); 

私の緯度と経度は二重型です。

インポートでは、Mapkitライブラリがインポートされていることを確認してください。

#import <MapKit/MapKit.h>
8
Pedro Romão

これは動作するはずです。

CLLocationCoordinate2D center;
.....
else if ([elementName isEqualToString:@"Lat"]) {
    center.latitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
else if ([elementName isEqualToString:@"Lon"]) {
    center.longitude = [[attributeDict objectForKey:@"degrees"] doubleValue];
}
4
Kal

変えてみて

[[attributeDict objectForKey:@"degrees"] integerValue]

[[attributeDict objectForKey:@"degrees"] floatValue]

また

checkpoint.Coord = [[CLLocation alloc] ....

coordをCLLocationCoordinate2Dとして定義したため、正しくありません。

  • cLLocationではありません
  • クラスではなく構造体

あなたがすべきことは:

    CLLocationCoordinate2D coordinate;    

    else if ([elementName isEqualToString:@"Lat"]) {
        coordinate.latitude = [[attributeDict objectForKey:@"degrees"] floatValue];
    }
    else if ([elementName isEqualToString:@"Lon"]) {
        coordinate.longitude = [[attributeDict objectForKey:@"degrees"] floatValue];
    }

    checkpoint.Coord = coordinate;
2
Joris Mans