错误信息如下: bool _WebTryThreadLock(bool),0xf28fbd0:试图从主线程或Web线程以外的线程获取Web锁。这可能是从辅助线程调用UIKit的结果。现在崩溃......
1 _ZL17_WebTryThreadLockb
2 WebThreadLock
3 -[UIWebTiledView layoutSubviews]
4 -[UIWebDocumentView layoutSubviews]
5 -[UIView(CALayerDelegate) layoutSublayersOfLayer:]
6 -[NSObject performSelector:withObject:]
7 -[CALayer layoutSublayers]
8 CA::Layer::layout_if_needed(CA::Transaction*)
9 CA::Context::commit_transaction(CA::Transaction*)
10 CA::Transaction::commit()
11 CA::Transaction::pop()
12 +[CATransaction commit]
13 FigLayerSynchronizerSynchronizeToMoment
14 itemremote_TimebaseSynchronizationUpdate
15 FigPlayerRemoteCallbacksServer_TimebaseSynchronizationUpdate
16 _XTimebaseSynchronizationUpdate
17 figmoviecallbacks_server
18 fpr_ClientPortCallBack
19 FigExpressNotificationThread
20 figThreadMain
21 _pthread_start
22 thread_start
我知道这是因为主线程以外的线程更新UI造成的。但我不知道为什么它不是在主线程中更新
以下是描述: 它与鲍风英音的应用程序类似。它支持自动播放,最小化播放UI,关闭播放UI。当我在picWall中点击一张图片时,它跳转到uiviewcontroller A ,播放音频文件,显示音频文件内容并更新进度视图的进度。
A 由自定义视图和movieplaycontroller变量组成。
自定义UIView由textview(显示音频文件内容),progressView,图片,最小化按钮,关闭按钮组成。
当我点击最小化按钮时它应该继续播放当前音频,当音频播放时,我应该在我的自定义UIView中更新进度条的进度,所以我将movieplaycontroller变量和自定义视图定义为全局变量
movieplaycontroller变量已在appdelegate文件中初始化,但自定义视图已在 A 中初始化。
当我点击最小化按钮和关闭按钮时,我将消失A,并同时释放自定义视图。
以上是我的功能需求和我的实现。当它输入* A 时,我没有创建新线程,所以我认为自定义视图不会被不在main中的线程更新。但它会崩溃当我反复点击不同的音频播放时。总是发生在我重复几次而不是规律性的时候。 它会发生在iPhone4上,我没有看到它发生在iPhone4s,iphone 5.我没有iPhone 3gs,所以我不知道它是否也会发生。 *
Now I modify my code to add the custom view by the function ”performSelectorOnMainThread“ in A's init function.It seemed solved.
我发布了这个问题,因为我想知道导致我的自定义视图从主线程以外的线程更新的原因。 如果有人知道,请告诉我!谢谢