2013-08-21 61 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並刪除不必要的(動畫)。

它解決了我的問題。我希望它有助於一些。