将CLLocationCoordinate2D存储到NSUserDefaults
我是新的iphone开发,我想存储CLLocationCoordinate2D
对象到NSUserDefaults
。 我在尝试
[defaults setObject:location forKey:@"userLocation"];
但它给出了错误'发送CLLocationCoordinate2D参数的不兼容的typesID'
那么如何将CLLocationCoordinate2D
存储到NSUserDefaults
? 谢谢。
如
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];
而且访问使用,
NSDictionary *userLoc=[[NSUserDefaults standardUserDefaults] objectForKey:@"userLocation"]; NSLog(@"lat %@",[userLoc objectForKey:@"lat"]); NSLog(@"long %@",[userLoc objectForKey:@"long"]);
这是我会做的:
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)];
NSUserDefaults类提供了访问常见types(如浮点数,双精度,整数,布尔值和URL)的便捷方法。 一个默认对象必须是一个属性列表,也就是一个实例(或集合的实例组合):NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary。 如果要存储任何其他types的对象,则通常应将其存档以创buildNSData的实例
请参阅: NSUserDefaults
你可以像这样设置
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"] ];
我希望它有帮助。
正如其他人所说,首先将其转换成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]!) } }