0

私は MapKit に基づいてアプリを構築しています。特定の数のピン (20 としましょう) を作成したいので、それらの座標をコードで指定しています。たとえば、私の実装ファイルでは次のようになります。

#define PIN1_LATITUDE 43.504156 
#define PIN1_LONGITUDE 12.343405

#define PIN2_LATITUDE 43.451696
#define PIN2_LONGITUDE 12.488599

20 個の値すべてについて同様です。問題は、特定のパラメーターに基づいて、20 個のピンのさまざまなセットを読み込んで表示したいということです。したがって、ピンの座標を外部ファイルに保存し、一度に 1 セットをロードしたいと思います。

それは可能ですか?どの構造を使用すればよいですか?ありがとうございました!

4

2 に答える 2

0
  • 20 ピンの緯度と経度の値の PLIST ファイルまたは json ファイルを作成します。
  • アプリが iOS5 以降をターゲットにしている場合は、JSONKit libまたはできれば ios フレームワーク クラスNSJSONSerializationが必要です。
  • ファイルをプロジェクト リソース フォルダーに追加します。
  • リソース ファイルをロードするコードを記述する

JSONKit を使用してそれを行う方法の例を次に示します。

json ファイルを作成し、次の json サンプルをコピーしてpoi_data.jsonに貼り付け、json ファイルを読み込みます。

    {
        "poi": [
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            },
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            },
            {
                "id": "1",
                "lat": "43.668997",
                "lng": "-79.385093"
            }
        ]
    }



    - (void)loadDataFromFile {
        NSString* path = [[NSBundle mainBundle] pathForResource:@"poi_data"
                                                         ofType:@"json"];
        NSString* content = [NSString stringWithContentsOfFile:path
                                                      encoding:NSUTF8StringEncoding
                                                         error:NULL];

        NSDictionary *poiCollection = [content objectFromJSONStringWithParseOptions:JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode error:nil];



            NSArray* pois = [result objectForKey:@"poi"];
                for (NSInteger i = 0; i < [pois count]; i++) {

                    NSDictionary* node = (NSDictionary*)[poi objectAtIndex:i];

                    CGFloat lat = [[node objectForKey:@"lat"] doubleValue];
                    CGFloat lng = [[node objectForKey:@"lng"] doubleValue];
            } 
}
  • PLIST を使用して NSDictionary にロードすることもできます。plist は Cocoa Touch で非常によくサポートされています。

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/QuickStartPlist/QuickStartPlist.html#//apple_ref/doc/uid/10000048i-CH4-SW5

バックグラウンド スレッドまたは NSOperation ブロックでロード データ コードを実行することを忘れないでください。ロードに時間がかかりすぎるために、アプリがクラッシュする可能性があります。

于 2013-10-04T15:35:03.517 に答える