2012-12-07 4 views
11
내 응용 프로그램에서이 오류를 받고 있어요

:UICollectionView :에 어설 션 실패 - [UICollectionView _endItemAnimations]

*** 어설 션 실패 -[UICollectionView _endItemAnimations]에서, /SourceCache/UIKit/UIKit-2372/UICollectionView.m:2801

그것은이 라인에 내 -controllerDidChangeContent: 방법에서 발생

:

[self.collectionView performBatchUpdates:^{...}]; 

사람이 원인이 무엇인지 알고 있나요? 내 코드는 https://gist.github.com/4440c1cba83318e276bb을 기반으로하며 손실이 발생합니다.

감사합니다.

답변

1

나는 그 때문에 당신의

-controllerDidChangeContent 

는 백그라운드 스레드를 여러 번 호출되고 있는지의 내기, 또 다른 스레드를 호출 할 때 performBatchUpdates은 여전히 ​​작동하고, 그래서 잘못된 동작에 이르게.

솔루션 - @synchronized 또는 사용 NSLocks

+0

를 호출되고되었다 그래서 이것은 –

1

문제는보기 didDisappear에 전무로 FRC 대리자를 설정하지 않는 한에서 포장하려고합니다.

+0

건배 문제가 아니었다! 그거였다! viewDidDisappear에서 FRC를 nil로 설정하고 viewWillAppear의 self에 재 할당하면 비슷한 문제가 해결됩니다. –

+0

FRC는 무엇을 의미합니까? : - | – Kalle

+0

@Kalle : FRC = 페치 결과 컨트롤러 – AlexR

9

이러한 유형의 어설 션은 예외로 처리됩니다. try/catch에서 배치 업데이트를 감싸고 예외 설명을 덤프하십시오. 그것은 당신의 전화에 대해 마음에 들지 않는 것을 정확히 알려줄 것입니다. 즉

: 그것은 확실히 주 스레드에서

@try 
    { 
     [self.collectionView performBatchUpdates:^{...}]; 
    } 
    @catch (NSException *except) 
    { 
     NSLog(@"DEBUG: failure to batch update. %@", except.description); 
    } 
+1

아 ... 내가 얼마나 신속하게 ... 얼마나 불행한 ... – Eonil

+0

디버깅을위한 좋은 옵션입니다. – kelin