菜鸟教程小白 发表于 2022-12-13 13:15:34

ios - MKMapView 没有正确删除注释?


                                            <p><p>我发现了一些奇怪的东西,也许任何人都熟悉:
我正在向 MKMapView 添加一个简单的 MKPointAnnotation,然后使用 KVO-compliance 修改其坐标属性,然后使用 -removeAnnotation: 删除注释。然而,当我在注释被删除后移动 map 时,图钉再次出现——即使注释被删除了!进一步检查,MKMapView 似乎并没有真正删除注释。</p>

<p>请查看以下代码片段。您可以将它粘贴到一个新的 Xcode iOS 项目中,单个 View 就足够了。将 MKMapView 添加到 View ,然后添加 3 个按钮 Start、Step、Stop,并将它们连接到适当的操作。
“userAnnotation”是 ViewController 中的 MKPointAnnotation ivar。
如果按停止,则 MKMapView 的注释数量会在删除前后打印到控制台。
ARC 已启用。</p>

<p>如何重现:</p>

<ol>
<li>按开始;出现一个图钉。</li>
<li>按步骤;大头针移动了一点。</li>
<li>按下停止;图钉消失了。</li>
<li>拖动 map- 大头针重新出现!</li>
</ol>

<p>如果你按开始然后停止(不是按步骤)​​,注释被正确删除,检查控制台中的计数器:1,1 =奇怪; 1, 0 = 正常</p>

<p>知道发生了什么吗?我认为我做的 KVO 是正确的。</p>

<pre><code>- (IBAction)startTouched:(id)sender
{
    userAnnotation = [ init];
    userAnnotation.coordinate = CLLocationCoordinate2DMake(50.85, 4.72); // some coord
    ;

    MKMapPoint p = MKMapPointForCoordinate(userAnnotation.coordinate);
    double w = 500 * MKMapPointsPerMeterAtLatitude(userAnnotation.coordinate.latitude);
    ;
}

- (void)nextLocation
{
    MKMapPoint p = MKMapPointForCoordinate(userAnnotation.coordinate);
    p.x += 10 * MKMapPointsPerMeterAtLatitude(userAnnotation.coordinate.latitude);

    ;
    userAnnotation.coordinate = MKCoordinateForMapPoint(p);
    ;

    NSLog(@&#34;pin at %@, %@&#34;, MKStringFromMapPoint(p), );
}

- (IBAction)stepTouched:(id)sender
{
    ;
}

- (IBAction)stopTouched:(id)sender
{
NSLog(@&#34;mark 10, map has %u annotations, %@&#34;, , userAnnotation);
    ;
NSLog(@&#34;mark 20, map has %u annotations, %@&#34;, , );
    userAnnotation = nil;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我不确定到底是什么问题,但如果您使用的是 setter(您就是这样;<code>userAnnotation .coordinate = ...</code> 只是 <code></code>)。 </p>

<p>尝试删除 willChange/didChange 看看是否会有所改善?</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - MKMapView 没有正确删除注释?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10165245/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10165245/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - MKMapView 没有正确删除注释?