菜鸟教程小白 发表于 2022-12-13 02:54:24

ios - Swift 中的自定义 MKAnnotation 未添加到 map 的注释中


                                            <p><p>我在 Swift 中创建了一个最小的自定义 MKAnnotation:</p>

<pre><code>import UIKit
import MapKit
class MyAnnotation : NSObject, MKAnnotation {
    var coordinate: CLLocationCoordinate2D
    var title: String = &#34;&#34;
    var subtitle: String = &#34;&#34;
    init(location coord:CLLocationCoordinate2D) {
      self.coordinate = coord
      super.init()
    }
}
</code></pre>

<p>然后我以正常方式将它添加到我的 MKMapView 中:</p>

<pre><code>let ann = MyAnnotation(location:self.annloc)
self.map.addAnnotation(ann)
</code></pre>

<p>注释出现在 map 上。 (我也有一个自定义的 MKAnnotationView,但这无关紧要。)但是有一个问题;注释实际上并不存在。我的意思是当我请求 map 的注释数组 <code>self.map.annotations</code> 时,它是空的。</p>

<p>这似乎纯粹是一个 Swift 问题。如果我将 MyAnnotation 替换为 Objective-C 实现,并更改我的项目的<em>其他内容</em>,它会完美运行!此 MyAnnotation 确实按预期显示在 <code>self.map.annotations</code> 中:</p>

<pre><code>// === .h file:
#import &lt;Foundation/Foundation.h&gt;
@import MapKit;
@interface MyAnnotation : NSObject &lt;MKAnnotation&gt;
@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title, *subtitle;
- (id)initWithLocation:(CLLocationCoordinate2D)coord;
@end
// === .m file:
#import &#34;MyAnnotation.h&#34;
@implementation MyAnnotation
- (id)initWithLocation: (CLLocationCoordinate2D) coord {
    self = ;
    if (self) {
      self-&gt;_coordinate = coord;
    }
    return self;
}
@end
</code></pre>

<p>这个问题是一个晦涩难懂的问题,您可能正在使用用 Swift 编写的自定义 MKAnnotation,而没有意识到有任何问题。但问题是真实存在的,可能会在未来造成麻烦。</p>

<p>所以我们非常清楚地知道,用 Swift 编写的 MKAnnotation 不起作用,而用 Objective-C 编写的 MKAnnotation 则完全一样。问题是:为什么?其次:我们能做些什么吗?是否可以在纯 Swift 中编写 MKAnnotation 以正确显示在 map 的 <code>annotations</code> 数组中?</p>

<p>我猜这个问题要么与 KVC 有关,要么与这样一个事实有关,让我们面对现实吧,Swift 对象与 Objective-C 对象并不完全相同。我尝试在我的 Swift 版本的 MKAnnotation 中添加各种类似 KVC 的功能、<code>dynamic</code> 等,但似乎没有任何帮助。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在我写这个问题的时候,这一定是 Swift 中的一个错误,因为现在(Xcode 6.3)这个问题已经消失了——问题已经解决了。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Swift 中的自定义 MKAnnotation 未添加到 map 的注释中,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/26659399/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/26659399/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Swift 中的自定义 MKAnnotation 未添加到 map 的注释中