4

私は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」が表示されます。

この特定の条件下で配列が変更される原因は何ですか? または、少なくとも、どうすればそれを防ぐことができますか?

4

2 に答える 2

4

これはデバイス上にありますが、私はそれを理解したように見えます.

RootViewController の didSelectRowAtIndexPath で、delegate.thearray からオブジェクトの 1 つを取得します。2nd View が押される直前に、このオブジェクトを離します。オブジェクトを割り当てていないので、それは間違っています。その行を削除し、配列に奇妙さがなくなりました。現在、物事は通常どおり機能しているようです。

于 2009-03-30T00:20:43.560 に答える
-1

これはシミュレーターまたはデバイスにありますか?

マウスのスクロール ホイールを使用してテーブルをスクロールすると、このようなことがシミュレータでのみ発生することがわかりました。シミュレーターは、スクロール ホイールを離したタイミングがわからないため、いつ戻るかわかりません。次に、タッチするとポップバックし、タッチしたアイテムとは別のアイテムにタッチが登録されます。これはデバイスでは発生しませんでした。スクロールバーでデバイスをスクロールすると、離すとすぐに元に戻るため、スクロールしすぎるとアイテムに触れることができません。

于 2009-03-29T23:58:56.827 に答える