5

我收到了一份关于我们的 iPad 应用程序崩溃的报告,并附有一条日志消息。日志消息的最后几行如下:

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

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

4

2 回答 2

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];
    });
    
于 2013-08-21T19:09:20.720 回答
2

首先,我要感谢 Michael G.Emmons 的回答。这让我朝着正确的方向前进。

问题是,我在(listView)viewWillApear 中调用了服务,在(detailsView)中我保存了详细信息(调用了服务),dismissAlert 有一个动画,当回到列表屏幕时(再次)调用了动画. 由于某种原因堆积起来并发出此警告。该设备过去在 Xcode 控制台中没有任何日志消息就挂起,并且很难调试。

它在 iOS (7) 上运行良好,在 iOS 8、iPhone 6 Simulator 及更高版本中出现问题。

我有一个类似的问题,我的控制台日志是::CoreAnimation:超时围栏 e025:CoreAnimation:未能收到围栏回复:10004003

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

它解决了我的问题。我希望它可以帮助一些人。

于 2014-10-09T10:35:32.443 回答