1

Core Data アプリを作成しており、オブジェクトをビューとマネージャーに渡し始めました。たとえば、私の UIImageView サブクラスは、オブジェクトから画像データを引き出す方法を知っており、画像データがロードされていない場合は、画像を取得、割り当て、使用する方法を知っています。データをサーバーにアップロードするシングルトン マネージャーがあり、それらは管理対象オブジェクトを取得し、アップロードが成功したときにサーバー ID で更新します。

管理対象オブジェクトを削除しているため、これは間違ったアプローチのようです (サーバーは、サーバー側でオブジェクトが削除されたことを通知します)。問題は、ビューとマネージャーの下からオブジェクトが削除される可能性があることです。

いくつかの例: 完了ブロックがまだオブジェクトを保持している場合、削除された管理対象オブジェクトで呼び出されます。ビューが消える前に通知またはユーザー イベントがビューに到達すると、削除されたオブジェクトにもアクセスしようとします。はい、テーブル ビュー/コレクション ビューは、基になるオブジェクトが削除されると (フェッチ述語と一致しなくなると) 関連付けられたビューを更新して削除しますが、まだ完了ブロックがあります。

オブジェクトが削除される場合、このように管理対象オブジェクトを渡すことは安全ですか? これまでのところ、このアプローチは夢のように機能しています。私は、すべてのビューとマネージャーからマネージド オブジェクトを完全に分離する必要があると考え始めています。つまり、コントローラーはオブジェクトをフェッチし、ビュー/セルを作成し、必要なすべてのデータ (デリゲート アクションが発生したときにオブジェクトを参照するための ID を含む) を設定してから、オブジェクトを再びフォールトさせます。ユーザーが何らかの方法でビューを操作するときは、コントローラーにコールバックし、関連付けられたオブジェクトをフェッチして、そのデータを使用する必要があります。管理対象オブジェクトを保持するのをやめるべきですか、それとも .isDeleted を全体的にチェックするクリーンな方法はありますか?

4

1 に答える 1

0

モックがメインスレッドでのみ作業を行っている場合、おそらくそれほど危険ではありませんが、良い設計上の決定とは言えません。メイン スレッドから moc の作業を行っている場合 (プライベート ディスパッチ キューまたは new-ado-of-ios5 オプションを使用して moc にプライベート キューを使用させる)、あなたがしていることは無謀です。

私は同様の設計をしていますが、moc で new-private-queue オプションを使用しています。モックから何かを必要とするオブジェクトは、「performBlock」コマンドを使用するシングルトンのインターフェースを介して取得する必要があります。この設計の良いところは、書くときに「performBlock」を使用するだけだということです。情報の取得は明らかに「performBlockAndWait」を使用して行われます。

このインターフェイスにより、Core Data コードを自由にリファクタリングできるようになり、他のものに手を加える必要がなくなります (これまでに 4 回行っています)。

編集:このリンクには詳細があります

于 2012-09-28T23:21:50.803 に答える