2012-12-07 10 views
11

ich diesen Fehler in meiner app bekommen:UICollectionView: Assertion Fehler in - [UICollectionView _endItemAnimations]

*** Assertionsfehler in -[UICollectionView _endItemAnimations], /SourceCache/UIKit/UIKit-2372/UICollectionView.m:2801

es auf dieser Linie in meiner -controllerDidChangeContent: Methode geschieht:

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

weiß jemand, was das verursacht? Mein Code basiert auf https://gist.github.com/4440c1cba83318e276bb und ich bin ratlos.

Danke!

Antwort

1

Ich wette, es ist wegen, dass Ihre

-controllerDidChangeContent 

in Hintergrund-Thread mehrmals aufgerufen wird, und performBatchUpdates noch funktioniert, wenn ein anderer Thread es nennt, so führt dies zu falschem Verhalten.

Lösung - versuchen Sie es in @synchronized oder mit NSLocks zu wickeln

+0

es auf jeden Fall auf dem Haupt-Thread genannt wurde, so war dies nicht das Problem –

1

Die Frage war nicht zu sehen didDisappear die FRC Delegierten auf Null zu setzen.

+0

Prost! Das war's! Das Setzen von FRC auf Null bei viewDidDisappear und die Neuzuweisung von self von viewWillAppear haben mein ähnliches Problem gelöst. –

+0

Wofür steht FRC? : - | – Kalle

+0

@Kalle: FRC = abgerufene Ergebnisse Controller – AlexR

9

Diese Arten von Assertionen werden als Ausnahmen ausgelöst. Wickeln Sie die Stapelaktualisierungen in einen try/catch und legen Sie die Beschreibung der Ausnahme ab. Es wird Ihnen genau sagen, was es an Ihrem Anruf nicht mag.

Mit anderen Worten:

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

Ah ich bin auf Swift ... wie unglücklich ... – Eonil

+0

Gute Option für das Debuggen. – kelin