CLLocation 变量不发送 KVO - NSKeyValueObservingOptionNew
Posted
技术标签:
【中文标题】CLLocation 变量不发送 KVO - NSKeyValueObservingOptionNew【英文标题】:CLLocation Variable not sending KVO - NSKeyValueObservingOptionNew 【发布时间】:2014-03-22 13:27:22 【问题描述】:我正在开发一个在位置模型中收集用户当前数据的简单应用程序。这是有效的,我可以记录位置。但是,没有 viewControllers 看到更新的变量。我在 viewControllers 中使用 KVO 来触发,但似乎 CLLocation 没有使用“NSKeyValueObservingOptionNew”发送。如果我使用“NSKeyValueObservingOptionInitial”,它将触发,但在 CLLocationManager 有机会设置实例之前触发。
有谁知道为什么 CLLocation 不发送“...New”值?就像我说的,它只有在设置为“...初始”状态时才有效。
想法?
查看控制器代码:
- (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);
【问题讨论】:
【参考方案1】:位置模型代码未触发 KVO 通知的主要原因可能是 locationManager:didUpdateLocations
委托方法中的这一行:
_currentLocation = locationFix;
代码直接为您要观察的属性的支持变量赋值。
仅当您使用综合属性设置器时才会触发自动 KVO 通知:
self.currentLocation = locationFix; // <-- assign using self.xxx
有点不相关,但在observeValueForKeyPath
方法中:
-
我不确定你为什么要查看
if ([keyPath isEqual:@"locationUpdated"])
。确定是您要查找的 keyPath
吗?
在这段代码中:
CLLocation *locationVariable = [[CLLocation alloc]init];
locationVariable = self.location.currentLocation;
alloc+init 是不必要的,因为该变量会立即被赋予一个新值。做吧:
CLLocation *locationVariable = self.location.currentLocation;
【讨论】:
感谢您的注意...我根据您的建议进行了更改,但仍然没有。 keyPath 是通过链接调用设置的 '[self.location addObserver:self forKeyPath:@"locationUpdated" options:NSKeyValueObservingOptionNew context:NULL];'我清理了代码(谢谢)。还有其他想法吗? 在视图控制器中,尝试像这样执行 addObserver:[self addObserver:self forKeyPath:@"self.location.currentLocation" options:NSKeyValueObservingOptionNew context:NULL];
并暂时删除在 observeValueForKeyPath 中对 keyPath 值的检查。
You Rock :-) 谢谢!以上是关于CLLocation 变量不发送 KVO - NSKeyValueObservingOptionNew的主要内容,如果未能解决你的问题,请参考以下文章