动态MKMap点加载

时间:2014-01-25 14:49:33

标签: ios multithreading mkmapview mkannotation

我正在尝试找到满足我需求的MKMaps的最佳方式。

我的代码很长,很难解释。

我需要做什么? ( * 的)

  • 了解用户感兴趣的位置。
  • 从此网站获取积分。
  • 将它们加载到地图中。
  • 使用动画更新地图(群集注释)。

我现在该怎么办?

  • regionDidChangeAnimated中,我致电GetPoints
  • GetPoints启动NSURLConnection以获取区域中的点数(使用region.span.latitudeDelta和region.span.longitudeDelta)。
  • connectionDidFinishLoading我正在呼叫AddPoints
  • AddPoints正在检查每个点是否已经在地图上,如果没有添加(不是直接添加到MapView,而是添加到“隐藏的”AllPointsMap)。
  • 将所有点添加到AllPointsMap Im中,调用updateVisibleAnnotations
  • updateVisibleAnnotations正在更新MapView(通过将visibleMapRect分隔为gridMapRect并且每个只显示一个MKAnnotation)并注意动画注释的方式和方式应该。

有什么问题?

它有效!但它不是那么顺利,updateVisibleAnnotations需要花费很多时间,地图在那段时间没有响应......

所以我在后台调用updateVisibleAnnotations,就像那样:

[self performSelectorInBackground:@selector(updateVisibleAnnotations) withObject:nil];

它非常棒,非常流畅的mapView动画,不会打扰用户界面。

但我不时得到“收集< __ NSArrayM:0x76c11b0>在被枚举时被突变”。 我不清楚究竟是什么导致它。但我猜测主线程正试图在后台线程使用时添加或删除注释。

我尝试在@synchronized中使用updateVisibleAnnotations,因此主线程不会中断后台线程,但它保持不变。 我尝试使用self.waitinigForUpdate BOOL @property来表明updateVisibleAnnotations正在后台运行,仍然会出现同样的错误......

让我想知道:也许这不是做我需要做的最好的方式( * ),是吗?

0 个答案:

没有答案