0

プルダウンして更新するために、スクロールビューのコンテンツインセットをアニメーション化しています。

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];

アニメーションをコミットするとクラッシュし、メインスレッドがクラッシュします。このコードブロックを削除しても、アプリがクラッシュすることはありません。このコードブロックにかなり絞り込まれた場合、この時点でクラッシュを引き起こす可能性があるのは何ですか?

4

1 に答える 1

1

アニメーションはスクロールするものであり、cellForRowAtIndexPath は Core Data フェッチ リクエストの結果を参照していたため、テーブル ビュー データをリロードする直前にアニメーションを誤って実行したため、アニメーションがアプリをクラッシュさせました。これは、テーブル ビューのデータが使用できなくなったため、アニメーションが存在しない行にスクロールしたために発生しました。

教訓 - スクロールビュー アニメーションとコア データを使用している場合は、テーブル ビュー データをリロードするタイミングに注意してください。フェッチを実行してからスクロールしてから、テーブル ビュー データをリロードしないでください。フェッチを実行してから、テーブル ビュー データをリロードしてからスクロールします。

クラッシュのエラー メッセージが表示されていれば、それは明らかでした。

于 2012-06-07T05:56:13.363 に答える