iOS - 为什么我不能将 NSUserDefaults 中的字符串设置为位置 属性?

iOS - Why can't I set a String from NSUserDefaults to a Location property?

我遇到了不熟悉的行为。

我在 Internet 上搜索,更准确地说是在 Whosebug 上搜索,找到了很多关于只读属性的文章和帖子。

编译过程和assignment/declaration/initialization感觉有大量无形的学习经验。

我很想清楚那些情况。

假设我有一个 属性

@property (nonatomic, strong) CLLocation *location;

我已经在我的 NSUserDefault 中存储了最后一个已知的用户位置作为字符串。

如果我想用我的 lastLocation 设置我的位置 属性 的坐标,我有一个编译错误:

Assignment to readonly property

这是我的代码行:

_location.coordinate = [[MyCustomUserDefaults lastLocation] doubleValue];

这是我的 NSUserDefaults getter :

 +(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];

在 NSUserDefaults 中保存位置坐标

 NSString *strlat = location.coordinate.latitude
 NSString *strlong = location.coordinate.longitude 
[[NSUserDefaults standardUserDefaults]setObject:strlat forKey:@"lat"];
[[NSUserDefaults standardUserDefaults] strlong:strlat forKey:@"long"];