私はいくつかの助けが必要なブロックとARCの理解にギャップがあります。私は、アニメーション完了ブロックから発生したテスターからクラッシュレポートを受け取りました。次のようにクラッシュがある:ARCでブロック内で宣言されたオブジェクトの有効期間はどのくらいですか?
例外の種類:EXC_BAD_ACCESS(SIGSEGV)
例外コード:KERN_INVALID_ADDRESS 0xf0000010
でこれは、次のアニメーション終了ブロック内で起きている(animateWithDuration:animations:completion:
を使用して)。私は一時的な変数を使用して、2つのビューコントローラを交換しています:
{
[current wasMovedOffScreen];
PlayerViewController *temp = current;
current = next;
next = temp;
}
next = temp;
は、クラッシュが発生した行です。アニメーションの時間は0.3秒です。
このコードは、ナビゲーションコントローラなどのオブジェクトのリストを通過するユーザーをシミュレートするために使用される2つの他のビューコントローラのコンテナとして機能するビューコントローラ内で実行されますが、コントローラは私にとっては適切ではありませんでした。
2つの子ビューコントローラは、現在のコントローラが現在のコンテンツを表示し、次のコントローラがリストを移動したときに新しいアイテムでアニメーション化するために使用される。
temp
が(current
とnext
と一緒に)実装で宣言されるようにブロックを変更すると、クラッシュが停止します。しかし、定義上ローカルで一時的な何かのためにクラスivarを保持する必要はありません。 temp
どうやらこのプロセス中にARCによって解放されたのはなぜそう
、
- ?
- これを実装する正しい方法は何ですか?ブロックインプリメンテーションに追加するべき生涯修飾子はありますか?
- 自分のデバイスまたはシミュレータでクラッシュを再現できないのはなぜですか?どちらのデバイスもiPhone 4と同じバージョンのiOS(5.0.1)を実行していました。
ベータが関与していないため、レプロの不足は本当に迷惑です! – jrturton