gpt4 book ai didi

cocoa-touch - 实时设置MKAnnotation坐标

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

我有一个符合 MKAnnotation 协议(protocol)的 map 点对象。在我尝试实时更改其坐标之前,它会按预期工作。

一开始我尝试使用:

[map_point setCoordinate : new_coordinate];

它不起作用,因为该属性是“只读”的。 Apple 文档说我应该添加一个自定义的“setCoordinate”,它需要符合 KVO。

已阅读有关 KVO 的文档。希望有人能给出一个关于如何使 setCoordinate KVO 兼容的基本示例。

最佳答案

简单地实现具有该确切格式的 setCoordinate: 方法将自动符合 KVO/KVC。您不需要做任何额外的事情:

- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate
{
//In this example, the ivar in this class that holds the coordinate
//is named "coord". Simply assign the new value to it...
coord = newCoordinate;
}

如果方法名与此完全相同(您可以更改参数名称newCoordinate),KVO 通知将自动为您发出。

参见 Do you need to call willChangeValueForKey: and didChangeValueForKey:?有关详细信息。

但是,如果您需要在不兼容的方法中更改坐标,您可以手动生成 KVO 通知:

- (void)someNonCompliantMethod
{
[self willChangeValueForKey:@"coordinate"];
coord = someNewCoordinate;
[self didChangeValueForKey:@"coordinate"];
}


请注意,只需将 coordinate 属性声明为 assignreadwrite,即可完全避免手动实现 setCoordiante: 方法(和 ivar) 而不是 readonly:

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
//and @synthesize in the @implementation

现在,您不需要编写自定义 getter 或 setter,并且能够从实例化此类的代码中直接分配给 coordinate:

[map_point setCoordinate : new_coordinate];

或:

map_point.coordinate = new_coordinate;


最后,如果注释所需的唯一属性是 titlesubtitlecoordinate,您还可以完全避免创建自定义类并使用内置的 MKPointAnnotation 类来实现可写的 coordinate 属性。

关于cocoa-touch - 实时设置MKAnnotation坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595440/

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