iOS-为什么可以';我是否将NSUserDefaults中的字符串设置为Location属性?
我遇到了一个不熟悉的行为 我在互联网上搜索,更准确地说是在StackOverflow上,找到了很多关于只读属性的文章和帖子 我觉得在编译过程和作业/声明/初始化方面有大量无形的学习经验 我真的想清楚地了解这些情况 想象一下我有一处房产iOS-为什么可以';我是否将NSUserDefaults中的字符串设置为Location属性?,ios,objective-c,readonly,assign,Ios,Objective C,Readonly,Assign,我遇到了一个不熟悉的行为 我在互联网上搜索,更准确地说是在StackOverflow上,找到了很多关于只读属性的文章和帖子 我觉得在编译过程和作业/声明/初始化方面有大量无形的学习经验 我真的想清楚地了解这些情况 想象一下我有一处房产 @property (nonatomic, strong) CLLocation *location; 我已将最后一个已知的用户位置作为字符串存储在我的NSUserDefault中 如果要将“我的位置”属性的坐标设置为“我的最后位置”,则会出现编译错误: 对只读
@property (nonatomic, strong) CLLocation *location;
我已将最后一个已知的用户位置作为字符串存储在我的NSUserDefault
中
如果要将“我的位置”属性的坐标设置为“我的最后位置”,则会出现编译错误:
对只读属性的赋值
以下是我的代码行:
_location.coordinate = [[MyCustomUserDefaults lastLocation] doubleValue];
以下是我的默认获取者:
+(NSString *) lastLocation
{
return [[NSUserDefaults standardUserDefaults] objectForKey:USER_PREF_LAST_LOCATION];
}
CLLocation的坐标属性是CLLocationCoordinate2D对象。你必须像这样开始
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude, longitude);
您可以使用NSNumber保存纬度和经度值
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithDouble:0.5] forKey:@"latitude"];
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithDouble:0.5] forKey:@"longitude"];
比你得到的价值
double latitude = [[[NSUserDefaults standardUserDefaults] objectForKey:@"latitude"] doubleValue];
double longitude = [[[NSUserDefaults standardUserDefaults] objectForKey:@"longitude"] doubleValue];
在NSUserDefault中保存位置坐标
NSString *strlat = location.coordinate.latitude
NSString *strlong = location.coordinate.longitude
[[NSUserDefaults standardUserDefaults]setObject:strlat forKey:@"lat"];
[[NSUserDefaults standardUserDefaults] strlong:strlat forKey:@"long"];
检查下面的链接,它可能对你有用,因为dup,IMO,最好的答案是@danh,我不同意。公认的答案更好。看到结构的字节被保存下来,我很害怕。为什么不保存原始双精度?如果
CLLocationCoordinate2D
被更新为使用浮动,或者添加了额外的属性,该怎么办?使用接受两种特定类型的CLLocation
初始值设定项会更安全,并且是未来的证明。@CraigOtis目前除了坐标之外,还有其他几个属性。这就是为什么我更喜欢NSData的想法:不是为了证明未来,而是为了证明现在:-)-除了lat/lon之外,danh私有/内部属性?当有一个初始值设定项接受它实际需要的两个属性时,我看不出想要保存这些属性的理由。如果您已经保存了这些数据,用户升级了他们的设备软件,而您的from字节构造现在失败了,该怎么办?初始化器/API的全部好处是,内部结构/实现可以在不需要外部调用方知道的情况下进行更改。