2013-08-21 27 views
5

我收到了我们iPad应用程序崩溃的报告,附有日志消息。日志消息的最后几行如下:有人可以解释'CoreAnimation:超时栅栏'日志消息吗?

Aug 21 08:58:51 2TesterPad backboardd[26] <Warning>: CoreAnimation: timed out fence 25993 
Aug 21 08:58:51 2TesterPad backboardd[26] <Warning>: CoreAnimation: updates deferred for too long 
Aug 21 08:58:52 2TesterPad AppName[2428] <Warning>: CoreAnimation: failed to receive fence reply: 10004003 

有谁能告诉我这些日志消息是什么意思吗?我一直无法找到关于此在线的任何良好信息。

回答

10

它通常意味着核心动画操作排队,但已经挂起太久并超时。

有几件事情要检查:

  • 确保你正在呼吁任何-viewDidAppear-viewWillAppear
  • 超级方法确保通过-viewDidAppear
  • 提出的观点之前,你不执行动画检查你只与主线程上的UI进行交互。在相关代码在后台线程上执行时,显示UIAlertView时,我看到了等待围栏消息的问题。您可以将代码放在一个块中并将其发送到主线程,例如:
  • 如果您有一个UIScollView,其中包含很多子视图并为UIScrollView设置了动画,则可能会发生这种情况。在这种情况下,即使这些子视图不在屏幕上,它也会动画它的所有子视图。看到这个答案:https://stackoverflow.com/a/10938889/257550。解决这个问题的一个解决方案是重新设计视图以使用UITableView,它确保只有可见单元格中的子视图才具有动画效果。

    dispatch_async(dispatch_get_main_queue(), ^{ 
    
        UIAlertView *alert = 
         [[UIAlertView alloc] initWithTitle:@"title", 
                mssage:@"message" 
               delegate:nil 
             cancelButtonTitle:@"OK" 
             otherButtonTitles:nil]; 
    
        [alert show]; 
    }); 
    
2

首先,我要感谢迈克尔G.Emmons的答案。这使我走向正确的方向。我在(listView)viewWillApear中调用服务,并在(detailsView)中保存细节(服务被调用),dismissAlert有一个动画,当回到列表屏幕(再次)时,动画被称为。因为某些原因而堆积如山,并抛出这个警告。该设备用于在Xcode控制台中没有任何日志消息而挂起,并且很难调试。

它在iOS(7)上正常工作,在iPhone 6模拟器及以上版本中遇到了iOS 8的问题。

我也有类似的问题,我的控制台日志为: :CoreAnimation:超时围栏E025 :CoreAnimation:未能收到围栏回复:10004003

解决方案:我适当地移动代码(服务调用)从viewWillAppear到viewDidAppear并删除不必要的(动画)。

它解决了我的问题。我希望它有助于一些。