2012-06-07 2 views
0

풀다운을 위해 스크롤 뷰 컨텐츠 삽입을 애니메이션으로 새로 고침하고 있습니다.iOS 코드가 주 스레드에서 commitAnimations에 충돌합니다.

NSLog(@" in main thread? %d", [NSThread isMainThread]); // prints 1 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:.3]; 
[scrollView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, scrollView.contentInset.bottom, 0.0f)]; 
// Crash here 
[UIView commitAnimations]; 

애니메이션을 커밋 할 때 충돌이 발생하고 주 스레드가 충돌합니다. 이 코드 블록을 제거하면 앱이 중단되지 않습니다. 이 코드 블록으로 상당히 좁혀진다면이 시점에서 충돌을 일으킬 수있는 것은 무엇입니까?

답변

1

애니메이션이 스크롤되고 cellForRowAtIndexPath 참조가 Core Data 가져 오기 요청의 결과이므로 테이블 뷰 데이터를 다시로드하기 전에 우연히했기 때문에 애니메이션이 응용 프로그램을 충돌 시켰습니다. 이는 표보기의 데이터를 더 이상 사용할 수 없기 때문에 애니메이션이 더 이상 존재하지 않는 행으로 스크롤 되었기 때문에 발생했습니다.

강의 습득 - 스크롤 뷰 애니메이션 및 핵심 데이터로 작업하는 경우 테이블보기 데이터를 다시로드하도록 선택할 때주의해야합니다. 가져 오기를 수행 한 다음 스크롤 한 다음 테이블보기 데이터를 다시로드하지 마십시오. 가져 오기를 수행 한 다음 테이블보기 데이터를 다시로드하고 스크롤하십시오.

충돌과 관련된 오류 메시지가 있었 더라면 정말 분명했을 것입니다.

관련 문제