3

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

它不应该导致你的问题(至少不是直接的),但一般来说,在你的 UI 代码中存在这样的网络代码是非常有问题的,原因有很多:

-在一般架构的基础上,它严重违反了 MVC(模型视图控制器)架构。pin 注释显然与您的 UI(视图)密切相关,而网络显然是您的后端(模型)的一部分。

- 因为 iOS 要求主线程保持响应,将执行 IO 或计算的代码附加到主线程本身就有风险。它可以做到并且工作得很好,但做错了将不可避免地导致崩溃。

4

3 回答 3

0

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

因此,例如,如果您在 connectionDidFinish 方法中添加您的 pin,您应该这样做:

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

希望对您有所帮助。我是从 Windows 写的,但该行应该可以工作。

于 2012-12-19T18:17:34.187 回答
0

一种选择是删除 pin(根本不绑定到 URL 连接),一旦 pin 丢失,加载标注或注释的数据(这是我假设你正在做的)。您可以随时设置加载指示器或 progressHUD 来告诉用户他们需要等待某些东西。这并不完全理想,但在您需要等待数据的情况下,您会怎么做?

只要用户知道您正在阻止它,Apple 就真的不在乎阻止 UI。就像进度条或进度 HUD。用户可以看到应用程序仍在工作并正在做某事。不显示任何内容并且在等待主线程/主循环返回时让 UI 冻结是行不通的。这只是糟糕的设计,Apple 很可能会为此而讨好你。

于 2012-12-20T15:00:26.003 回答
0

我不确定您要达到的目标。应用程序人员是否因为您直接在主线程中获取 URL 而抱怨?您能否发送一个代码片段来显示您如何获取网址?

于 2012-12-20T14:27:31.427 回答