gpt4 book ai didi

ios - CLLocation 变量不发送 KVO - NSKeyValueObservingOptionNew

转载 作者:行者123 更新时间:2023-11-29 12:50:12 24 4
gpt4 key购买 nike

我正在开发一个简单的应用程序,用于在位置模型中收集用户当前数据。这很有效,我可以记录位置。但是,没有 viewController 看到更新的变量。我在 viewControllers 中使用 KVO 来触发,但似乎 CLLocation 没有使用“NSKeyValueObservingOptionNew”发送。如果我使用 'NSKeyValueObservingOptionInitial' 它将触发,但它会在 CLLocationManager 有机会设置实例之前触发。

有谁知道为什么 CLLocation 没有发送“...New”值?就像我说的,它只有在设置为“...初始”状态时才有效。

想法?

查看 Controller 代码:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

if ([keyPath isEqual:@"locationUpdated"]) {

CLLocation *locationVariable = [[CLLocation alloc]init];
locationVariable = self.location.currentLocation;
NSLog(@"the location vaiable: %@", locationVariable);
self.theMap.centerCoordinate = self.location.currentLocation.coordinate;

}
}

位置模型代码:

- (void)startLocationManger {

if ([self locationManager] == nil) self.locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[_locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {

CLLocation *locationFix = [locations lastObject];
_currentLocation = locationFix;
NSLog(@"Current Location: %@", _currentLocation);

}

最佳答案

KVO 通知未从位置模型代码触发的主要原因可能是 locationManager:didUpdateLocations 委托(delegate)方法中的这一行:

_currentLocation = locationFix;

代码直接为您要观察的属性的支持变量赋值。

自动 KVO 通知仅在您使用合成属性 setter 时触发:

self.currentLocation = locationFix;  // <-- assign using self.xxx


有点不相关,但在 observeValueForKeyPath 方法中:

  1. 我不确定您为什么要检查 if ([keyPath isEqual:@"locationUpdated"])。您确定这是您要查找的 keyPath 吗?
  2. 在这段代码中:

    CLLocation *locationVariable = [[CLLocation alloc]init];
    locationVariable = self.location.currentLocation;

    alloc+init 是不必要的,因为变量会立即被赋予一个新值。只是做:

    CLLocation *locationVariable = self.location.currentLocation;

关于ios - CLLocation 变量不发送 KVO - NSKeyValueObservingOptionNew,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com