2011-07-18 14 views
30

これは簡単なことであると思われるので、私はこれを聞いて悪いと感じますが、私ができるすべての関連リソースを見て、私が他人が使用していることを見たソリューションの組み合わせは何もありませんでした。カスタム緯度/経度で新しい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]; 
} 

私は取得しています現在の誤差がある:「互換性がないから「CLLocationCoordinate2Dに割り当て初期化関数の戻り値が間違っていることを意味していますが、その組み込み関数の理由はわかりません。

私も持っています私は他の誰かがやって見たように私には最も理にかなって何をしようとした:

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

それは即時エラーを返しませんが、私がビルドして実行しようとすると、それは私を与える:

のための未定義のシンボルは、 i386アーキテクチャ: "_CLLocationCoordinate2DMake" から参照: - [XMLParserのパーサーは:didStartElement:名前空間URI:修飾名は:属性:] Checkpoint.o LDに:記号(S)i386アーキテクチャ collect2は見つかりません:ldは1つの終了ステータスが返さ

私はこの時点で非常にアイデアがないので、正しい方向の助言/明確化/微妙な振る舞いは非常に高く評価されます。

+5

このような簡単な質問をするのは悪いことではありません。それが私たちがここにいるのです。 –

答えて

49

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

他の人が指摘しているように、ファイル内の緯度/経度は整数ではない可能性があります。私が何をしたか

+0

ああ、それは意味がある、私はそれが行方不明のフレームワークと関係していたと思った。私はおそらくこれと一緒に行くつもりです。なぜなら、それらを他の方法で設定しようとしても、私にエラーが出るからです。 –

2

あなたは

    ですCLLocationCoordinate2D、あるとしてCOORDを定義したとしても

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

    が正しいことはできません

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

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

    を変更してみてください

  • ない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; 
+0

ねえ、ジョリス、速い返事をいただきありがとうございます!私は明確化を感謝し、それはかなり意味があります。私はあなたがショットを提案した変更を与え、私は "式が割り当て可能ではありません"というエラーを得ることになりました。私のコードはあなたが提案したものと同じですが、なぜxcodeがなぜそれを承認しないのか分かりません。何らかの方法で私に知らせることができれば、主な質問を編集します!ありがとうございました! –

+0

コードを変更しました。これはうまくいくはずです –

+0

これはかなり古くなっていますが、CLLocationDegrees型(CLLocationCoordinate2dが構成されています)はfloatではなくdoubleです...必要な解像度に応じて、floatValueの代わりにdoubleValueを呼び出すとします。 –

4

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

こんにちはカル、速い応答のおかげで、残念ながら私はジョリスの提案が私を得る同じエラーセットを取得しています。あなた(またはジョリス)に理由についてのアイデアがあれば、私はそれらにショットを与えたいと思います。ありがとう! –

6

されました: は最初CLLocationCoordinate2Dを作成:

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

は私の緯度と経度はダブルタイプです。

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

#import <MapKit/MapKit.h>