2013-08-21 16 views
5

Otrzymałem raport o awarii z naszą aplikacją na iPada, z dołączoną wiadomością do dziennika. Ostatnia para wierszy komunikatu dziennika jest następująca:Czy ktoś mógłby wytłumaczyć komunikat dziennika "CoreAnimation: timed out fence"?

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 

Czy ktoś może mi powiedzieć, co oznaczają te logi? Nie udało mi się znaleźć żadnych dobrych informacji na ten temat w Internecie.

Odpowiedz

10

Zazwyczaj oznacza to, że operacje rdzenia animacji są ustawiane w kolejce, ale oczekują na zbyt długi czas i upłynął limit czasu.

kilka rzeczy do sprawdzenia:

  • Zapewnienie dzwonisz super sposób na dowolnym -viewDidAppear i -viewWillAppear
  • Upewnić się, że nie radzą sobie animacje przed pogląd jest prezentowany poprzez -viewDidAppear
  • Sprawdź jesteś tylko interakcja z interfejsem w głównym wątku. Podczas wyświetlania UIAlertView, gdy odpowiedni kod został wykonany w wątku tła, widziałem problemy z komunikatem wait fence. Możesz się upewnić, umieszczając swój kod w bloku i wysyłając go do głównego wątku, przykład poniżej:
  • Może się to zdarzyć, jeśli masz UIScollView, który ma wiele subskrybentów i ożywiasz UIScrollView. W takim przypadku będzie animować wszystkie swoje subviews, nawet jeśli te subviews nie są wyświetlane na ekranie. Zobacz tę odpowiedź: https://stackoverflow.com/a/10938889/257550. Jednym z rozwiązań, które można rozwiązać, byłoby przeprojektowanie widoku w celu użycia UITableView, co zapewnia, że ​​animowane są tylko subviews w widocznych komórkach.

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

Najpierw chciałbym podziękować Michaelowi G.Emmons na odpowiedź. To postawiło mnie we właściwym kierunku.

Problem polegał na tym, że dzwoniłem do usługi w widoku (listView) viewWillApear, i w (detailsView) Zapisałem dane (usługa została wywołana), dismissAlert miał animację, po powrocie do ekranu listy (ponownie) animacja została wywołana. Zostały spiętrzone dla somereason i rzucając to ostrzeżenie. Urządzenie służy do zawieszania się bez żadnego komunikatu w konsoli Xcode i trudno było debugować.

To działało dobrze z iOS (7), miało problemy z iOS 8, w iPhone 6 Simulator i wyżej.

miałem podobny problem, moje dzienniki konsoli były: : CoreAnimation: timed out płot E025 : CoreAnimation: nie można odbierać płot odpowiedź: 10004003

Rozwiązanie: przeniosłem kod (połączenia Service), aby odpowiednio od viewWillAppear do viewDidAppear i usunięte niepotrzebne (animacje).

To rozwiązało mój problem. Mam nadzieję, że to pomaga niektórym.

Powiązane problemy