我在iOS中使用MapKit和注释。在添加注释之前(可能需要一段时间),我想显示一个小的“正在加载......”UIView。如果我在没有线程的情况下执行此操作,则加载视图会滞后以至于在它被解除之前几乎不会出现。如果我使用performSelectorInBackground加载注释,它将每隔几次尝试工作,UIView的其余部分将出现但没有注释,即使调用了mapView:didAddAnnotationViews:
。任何人都可以想到为什么会出现如此不可预测的行为?
这就是我调用它的方式,如果它有帮助:
[self performSelectorInBackground:@selector(refreshAnnos) withObject:nil];
答案 0 :(得分:2)
您可以在后台加载注释,但是您应该始终在主线程上添加注释。
这就是为什么
mapView:didAddAnnotationViews:
被调用,但不会传播到UI。它与在后台调用UITableViewDelegate方法相同。
您可以使用GCD尝试以下设计模式
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
//Load the annotations on the background queue;
dispatch_async(dispatch_get_main_queue(), ^{
//add the annotations to the mapView;
});
});
答案 1 :(得分:1)
你在refreshAnnos
做了什么?
如果您在那里添加注释到mapview,它将无法工作(因为后台线程)。您需要更新主线程内的mapview。
最佳, 基督教