我有一个处理图像的多线程Cocoa应用程序。该程序有一个进度条和一些显示该过程有多远的文本。一切都很好。但是,有时界面会冻结,一切都会停止更新。进度条停止移动,文本在百分比计数器中停止更新。但是,实际过程仍然有效!我有一个NSBeep()在程序完成时触发,我仍然听到即使UI不再更新。这就好像UI只是从代码中断开。
另一个奇怪的问题是,有时在用户想要选择文件时打开的NSOpenPanel只是一个白色的空白。我在主线程中声明了NSOpenPanel(我正在使用[NSOpenPanel openPanel]),这有助于(我试着先保留它,但是没有用)。我不知道这是否相关,但任何想法都会受到赞赏!
我在Mac OS X 10.5.8上使用Xcode 3.1.1(GCC 4.2)。
答案 0 :(得分:4)
您正试图从其他线程操纵UI。如文档中所述,AppKit通常不是线程安全的,您应该在主线程上与GUI进行交互。请参阅-performSelectorOnMainThread:withObject:waitUntilDone:。