首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何不使用setCoordinate来更新注释?

如何不使用setCoordinate来更新注释?
EN

Stack Overflow用户
提问于 2012-02-21 17:33:47
回答 2查看 546关注 0票数 3

我有一个子类NSManagedObject,它符合MKAnnotation协议,它具有纬度和经度的NSNumber属性。

当我自己更改任何坐标时,我使用setCoordinate:并更新setCoordinate:实现中的纬度和经度属性。使用此方法,map视图将更新注释。但是,当我通过mergeChangesFromContextDidSaveNotification:将更改与另一个mergeChangesFromContextDidSaveNotification合并时,由于纬度和经度属性显式更改,因此不使用setCoordinate:。这可以防止任何关于坐标更改的KVO通知。

我尝试使用以下代码获取地图视图,以实现坐标取决于纬度和经度属性:

代码语言:javascript
复制
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
    NSSet *keyPaths = [super keyPathsForValuesAffectingValueForKey:key];

    if ([@"coordinate" isEqualToString:key]) {
        NSSet *affectingKeys = [NSSet setWithObjects:@"latitude", @"longitude", nil];
        keyPaths = [keyPaths setByAddingObjectsFromSet:affectingKeys];
    }

    return keyPaths;
}

但是,该代码会产生此崩溃:

终止应用程序由于未注册异常'NSRangeException',原因是:“无法删除键路径的观察者”坐标“,因为它没有注册为观察者‘

对于如何防止坠机,或者在改变纬度或经度时发出坐标KVO通知的替代方法,有什么想法吗?谢谢你看一看。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-22 22:06:19

我通过更改setCoordinate:来修正这个问题,以便它使用由原语存取器数据自动生成的原语存取器来设置latitudelongitude属性。

我怀疑,由于我的keyPathsForValuesAffectingValueForKey:使coordinate键同时依赖于latitudelongitude键,所以当setCoordinate:使用公共访问器而不是原始访问器时,MKMapView会感到困惑。

当使用公共访问器方法设置纬度和经度时,任何观察coordinate密钥路径的对象都会观察到三个单独的变化(对于密钥路径coordinatelatitudelongitude),而此时只需要观察一个更改(coordinate),这就混淆了地图视图。

票数 1
EN

Stack Overflow用户

发布于 2012-02-21 18:12:18

这有点开销,但您可以观察到latitudelongitude参数(resp )。重写它们的设置程序),并在更改时强制设置坐标(使用setCoordinate:)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9382266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档