私はUITableViewを持っており、スクロールするとはるかにバウンスバッグになります。これは、ユーザーがテーブルをドラッグして、テーブルの半分だけが表示され、メイン ビューの残りの半分が白く表示されることも意味します。これにより、アプリで奇妙な動作が発生します。AppDelegate で配列を作成します。RootViewController の viewDidLoad で、AppDelegate への参照を取得し、アプリがシャットダウンするまで保持します。RootViewController の cellForRowAtIndexPath で、AppDelegate インスタンスの配列を参照して、セル ラベルを埋めるオブジェクトを取得します。上記のようにユーザーがスクロールするまで、これは正常に機能します。これが発生すると、たとえば配列内のオブジェクト 7 が UICachedDeviceRGBColor に変わったことをデバッガーで確認できます。なぜそれが起こるのか分かりません。配列は、アプリの作成時に AppDelegate で 1 回だけ割り当てられます。
私が知る限り、最初にテーブル内の行をクリックする必要があります。UITableView もある新しいビューがプッシュされます。この 2 番目のビューの cellForRowAtIndexPath では、2 番目のビューにも配列への参照があるため、delegate.array を確認します。配列内のオブジェクト 2 が次のようになっていることがすぐにわかります。
2 : UIDeviceRGBColorSpace 1 1 1 1
それはあってはならないことです。次に、クリックして戻ってメインテーブルが再び表示されたら、上記のスクロール手法を実行して奇妙なものを取得します。cellForRowAtIndexPath のブレークポイントに到達するまでテーブルをスクロールすると、配列が変更されていることがわかります。オブジェクト 2 は正しいタイプですが、オブジェクト 7 は正しくありません。
問題は、オブジェクト 7 にアクセスしてキャスト先の型のプロパティを呼び出そうとすると、もちろんそのプロパティが UICachedDeviceRGBColor に存在しないことです。これは「Inavlid」なので、メモリ アクセスが悪いために「EXC_BAD_INSTRUCTION」が表示されます。
この特定の条件下で配列が変更される原因は何ですか? または、少なくとも、どうすればそれを防ぐことができますか?