我正在尝试找到满足我需求的MKMaps的最佳方式。
我的代码很长,很难解释。
我需要做什么? ( * 的)
我现在该怎么办?
regionDidChangeAnimated
中,我致电GetPoints
。GetPoints
启动NSURLConnection以获取区域中的点数(使用region.span.latitudeDelta和region.span.longitudeDelta)。connectionDidFinishLoading
我正在呼叫AddPoints
。AddPoints
正在检查每个点是否已经在地图上,如果没有添加(不是直接添加到MapView,而是添加到“隐藏的”AllPointsMap)。updateVisibleAnnotations
。updateVisibleAnnotations
正在更新MapView(通过将visibleMapRect
分隔为gridMapRect
并且每个只显示一个MKAnnotation)并注意动画注释的方式和方式应该。有什么问题?
它有效!但它不是那么顺利,updateVisibleAnnotations
需要花费很多时间,地图在那段时间没有响应......
所以我在后台调用updateVisibleAnnotations
,就像那样:
[self performSelectorInBackground:@selector(updateVisibleAnnotations) withObject:nil];
它非常棒,非常流畅的mapView动画,不会打扰用户界面。
但我不时得到“收集< __ NSArrayM:0x76c11b0>在被枚举时被突变”。 我不清楚究竟是什么导致它。但我猜测主线程正试图在后台线程使用时添加或删除注释。
我尝试在@synchronized
中使用updateVisibleAnnotations
,因此主线程不会中断后台线程,但它保持不变。
我尝试使用self.waitinigForUpdate
BOOL @property来表明updateVisibleAnnotations
正在后台运行,仍然会出现同样的错误......
让我想知道:也许这不是做我需要做的最好的方式( * ),是吗?