10

私はiPhone開発に不慣れで、CLLocationCoordinate2Dオブジェクトをに保存したいと思っていますNSUserDefaults。やっています

    [defaults setObject:location forKey:@"userLocation"];

しかし、「CLLocationCoordinate2Dを互換性のないタイプIDのパラメーターに送信しています」というエラーが発生します

では、どのように保存CLLocationCoordinate2DするのNSUserDefaultsですか?ありがとう。

4

6 に答える 6

15

これは私がすることです:

NSData *data = [NSData dataWithBytes:&coordinate length:sizeof(coordinate)];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"key"];
[[NSUserDefaults standardUserDefaults] synchronize];

次に、次のように取得できます。

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"key"];
CLLocationCoordinate2D coordinate;
[data getBytes:&coordinate length:sizeof(coordinate)];
于 2013-09-20T07:09:46.127 に答える
3

NSUserDefaults クラスは、float、double、integer、Boolean、URL などの一般的な型にアクセスするための便利なメソッドを提供します。デフォルト オブジェクトは、プロパティ リスト、つまり、NSData、NSString、NSNumber、NSDate、NSArray、または NSDictionary のインスタンス (またはコレクションの場合はインスタンスの組み合わせ) である必要があります。他のタイプのオブジェクトを保存する場合は、通常、アーカイブして NSData のインスタンスを作成する必要があります。

参照: NSUserDefaults

于 2013-09-20T06:55:53.953 に答える
2

このように設定できます..

CLLocationCoordinate2D coordinate; // need to set your coordinate here

[[defaults setObject:[NSString stringWithFormat:@"%g",coordinate.latitude] forKey:@"latitude"] ];
[[defaults setObject:[NSString stringWithFormat:@"%g",coordinate.longitude] forKey:@"longitude"] ];

役立つことを願っています。

于 2013-09-20T07:06:41.653 に答える
1

Dictionary他の人が言ったように、最初にまたはオブジェクトに変換してから、Data通常どおりに保存します。Swift では、拡張機能の使用を強くお勧めします。これが私がしたことです:

extension CLLocationCoordinate2D {

    private static let Lat = "lat"
    private static let Lon = "lon"

    typealias CLLocationDictionary = [String: CLLocationDegrees]

    var asDictionary: CLLocationDictionary {
        return [CLLocationCoordinate2D.Lat: self.latitude,
                CLLocationCoordinate2D.Lon: self.longitude]
    }

    init(dict: CLLocationDictionary) {
        self.init(latitude: dict[CLLocationCoordinate2D.Lat]!,
                  longitude: dict[CLLocationCoordinate2D.Lon]!)
    }

}
于 2017-06-04T07:43:22.400 に答える