首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将CLLocationCoordinate2D存储到NSUserDefaults

将CLLocationCoordinate2D存储到NSUserDefaults
EN

Stack Overflow用户
提问于 2013-09-20 06:54:15
回答 6查看 11.1K关注 0票数 9

我是iphone开发的新手,我想将CLLocationCoordinate2D对象存储到NSUserDefaults。我在努力

代码语言:javascript
复制
    [defaults setObject:location forKey:@"userLocation"];

但是它给出了错误的‘发送CLLocationCoordinate2D到不兼容的id'参数。

那么如何将CLLocationCoordinate2D存储到NSUserDefaults中呢?谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-09-20 07:10:55

正如公司的所说,

默认对象必须是属性列表,即NSDataNSStringNSNumberNSDateNSArrayNSDictionary的实例。

我用它来存储,

代码语言:javascript
复制
    NSNumber *lat = [NSNumber numberWithDouble:location.latitude];
    NSNumber *lon = [NSNumber numberWithDouble:location.longitude];
    NSDictionary *userLocation=@{@"lat":lat,@"long":lon};

    [[NSUserDefaults standardUserDefaults] setObject:userLocation forKey:@"userLocation"];
    [[NSUserDefaults standardUserDefaults] synchronize];

和access使用,

代码语言:javascript
复制
    NSDictionary *userLoc=[[NSUserDefaults standardUserDefaults] objectForKey:@"userLocation"];
    NSLog(@"lat %@",[userLoc objectForKey:@"lat"]);
    NSLog(@"long %@",[userLoc objectForKey:@"long"]);
票数 33
EN

Stack Overflow用户

发布于 2013-09-20 07:09:46

这就是我要做的:

代码语言:javascript
复制
NSData *data = [NSData dataWithBytes:&coordinate length:sizeof(coordinate)];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"key"];
[[NSUserDefaults standardUserDefaults] synchronize];

然后你可以像这样检索它:

代码语言:javascript
复制
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"key"];
CLLocationCoordinate2D coordinate;
[data getBytes:&coordinate length:sizeof(coordinate)];
票数 14
EN

Stack Overflow用户

发布于 2018-06-08 12:02:01

代码语言:javascript
复制
import CoreLocation

// Store an array of CLLocationCoordinate2D
func storeCoordinates(_ coordinates: [CLLocationCoordinate2D]) {
let locations = coordinates.map { coordinate -> CLLocation in
    return CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)
}
let archived = NSKeyedArchiver.archivedData(withRootObject: locations)
UserDefaults.standard.set(archived, forKey: "coordinates")
UserDefaults.standard.synchronize()
}

// Return an array of CLLocationCoordinate2D
func loadCoordinates() -> [CLLocationCoordinate2D]? {
guard let archived = UserDefaults.standard.object(forKey: "coordinates") as? Data,
    let locations = NSKeyedUnarchiver.unarchiveObject(with: archived) as? [CLLocation] else {
        return nil
}

let coordinates = locations.map { location -> CLLocationCoordinate2D in
    return location.coordinate
}
        return coordinates
}

现在让我们测试实现:

代码语言:javascript
复制
let testCoordinates = [
CLLocationCoordinate2D(latitude: 0.123456789, longitude: 0.123456789),
CLLocationCoordinate2D(latitude: 1.123456789, longitude: 1.123456789),
CLLocationCoordinate2D(latitude: 2.123456789, longitude: 2.123456789)
]

self.storeCoordinates(testCoordinates)

let coordinates = loadCoordinates()
print(coordinates)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18910612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档