在mapView上添加pin不适用于appstore版本

时间:2012-12-11 07:55:53

标签: ios android-mapview nsurlconnection

我提交了我的应用程序并在几周前被接受了。但是,我有一个问题,我的一个关键功能是添加pin不起作用,但它适用于构建版本。添加引脚需要URL连接。你能看一下我从苹果开发者那里得到的答案并指导我吗?

它不应该导致你的问题(至少不是直接),但总的来说 在UI代码中使用这样的网络代码是非常有问题的 出于多种原因:

- 在一般架构方面,它是对MVC(模型)的大违反 视图控制器)架构。引脚注释显然严重束缚 到你的UI(视图),而网络显然是你后端的一部分( 模型)。

- 因为iOS要求主线程保持响应,附加代码 对主线程执行IO或计算本身就存在风险。有可能 完成并且运作良好,但做错了将不可避免地导致崩溃。

3 个答案:

答案 0 :(得分:0)

NSURLConnection在后台工作,与UI的交互应该在主线程上。

所以,例如,如果你在connectionDidFinish方法中添加你的引脚,你应该这样做:

[mapView performSelectorOnMainThread:@selector(addAnnotation:) withObject:yourAnnotation waitUntilDone:[[NSThread currentThread] isMainThread]];

希望能帮到你。我是从windows写的,但该行应该可以工作。

答案 1 :(得分:0)

我不确定你想要实现的目标。 App人员是否在抱怨,因为您是在主线程中直接获取URL?你能发一个代码片段来展示你如何获取网址吗?

答案 2 :(得分:0)

一个选项是丢弃引脚(根本没有绑定到URL连接),一旦引脚掉线,加载数据以进行标注或注释(这是我假设您正在做的事情)。你总是可以加载一个加载指示器或progressHUD来告诉用户他们需要等待什么。它并不完全理想,但在您需要等待数据的情况下,您打算做什么?

只要用户意识到你阻止它,Apple就不关心阻止UI。像进度条或进度HUD。用户可以看到应用程序仍在运行并执行某些操作。没有显示任何内容并且在等待主线程/主循环返回时让UI冻结是不可行的。这只是一个糟糕的设计,苹果可能会叮嘱你。