将CLLocationCoordinate2D存储到NSUserDefaults

Tos*_*lji 10 iphone objective-c nsuserdefaults cllocationmanager ios

我是iphone开发的新手,我想存储CLLocationCoordinate2D对象NSUserDefaults.我在尝试

    [defaults setObject:location forKey:@"userLocation"];
Run Code Online (Sandbox Code Playgroud)

但它给出错误'将CLLocationCoordinate2D发送到不兼容类型id的参数'

那么如何CLLocationCoordinate2D存入NSUserDefaults?谢谢.

Tos*_*lji 34

正如pdrcabrod所说,

"默认的对象必须是一个属性列表,也就是一个实例NSData,NSString,NSNumber,NSDate,NSArray,或NSDictionary."

我用它来存储,

    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];
Run Code Online (Sandbox Code Playgroud)

并访问使用,

    NSDictionary *userLoc=[[NSUserDefaults standardUserDefaults] objectForKey:@"userLocation"];
    NSLog(@"lat %@",[userLoc objectForKey:@"lat"]);
    NSLog(@"long %@",[userLoc objectForKey:@"long"]);
Run Code Online (Sandbox Code Playgroud)

  • 应该是`NSNumber*lat = [NSNumber numberWithDouble:location.coordinate.latitude]; NSNumber*lon = [NSNumber numberWithDouble:location.coordinate.longitude]; ` (3认同)

And*_*kha 15

这就是我要做的:

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

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

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"key"];
CLLocationCoordinate2D coordinate;
[data getBytes:&coordinate length:sizeof(coordinate)];
Run Code Online (Sandbox Code Playgroud)