0

就像莎拉在这个链接中说的: https ://forums.developer.apple.com/thread/26922 当我调用“presentControllerWithNames()”并且页面数超过 5 时,我使用方法“becomeCurrentPage”遇到了同样的问题。我有一个 WatchKit 应用程序,其中初始控制器创建了一个使用 presentControllerWithNames() 调用的 15 页界面。所有这些都是相同的子类 WKInterfaceController。根据传递的上下文数据,前 15 个页面中的一个将在 awakeWithContext() 期间调用 becomeCurrentPage() 以使其成为活动页面。只要它是早期页面之一,它就可以正常工作,但对于后面的页面,显示显示为空白。如果我向后滑动页面,则在我到达第 4 页之前什么都不会出现,该页面会在稍许停顿后显示。之后向前或向后滑动会显示预期的显示。使用调试器,我可以看到界面元素都已初始化并且可以通过编程方式访问。它们未设置为隐藏,但不会出现。

编写一个非常简单的测试应用程序,我发现问题不是页面总数,而是调用 becomeCurrentPage() 的页面的索引。这在模拟器和手表之间或从测试到测试之间并不一致。

在我在模拟器上运行的测试应用程序中,如果任何页面(包括 18 个页面)处于活动状态,则具有 30 个页面的应用程序将始终工作。激活第 19 页有时会起作用。激活第 20 页将永远无法正常工作。

在我的实际手表中,数字更低且变化更大:激活第 5 页将始终有效。激活第 6 - 10 页有时会起作用。激活第 16 页或更多页将永远无法正常工作。

我稍后尝试在方法中设置页面:“didAppear”,如果我想要 10 或 20 页,它没有帮助。

我发现的唯一解决方法是在页面之间进行一系列向前跳转,每个页面之间都有一个延迟。我发现以 0.3 秒的延迟向前跳转 3 页一直有效,但它使界面看起来很糟糕,因为它需要超过一秒钟的时间才能到达目标页面,并且屏幕会在你前进时闪烁中间页面。

这是 becomeCurrentPage() 的已知错误吗?有谁知道如何处理这个问题?

4

1 回答 1

0

从主线程调用 becomeCurrentPage() 对我有用。

Apple 文档提到总是从主线程调用 becomeCurrentPage()。

dispatch_async(dispatch_get_main_queue(),{  
     controller.becomeCurrentPage()  
})
于 2016-03-24T04:03:28.417 回答