1

Image : NSManagedObjectと の2 つのプロパティを持つ がありNSString* localPathますNSString* remoteUrl

管理オブジェクト コンテキストを呼び出してオブジェクトを保存するときにsave:&error、ファイルをダウンロードし、ダウンロードが失敗したときに保存操作も失敗するようにします。

Image Entity への複数の参照を含む深くネストされた DB 構造があるため、ダウンロードを手動でトリガーするすべてのイメージを見つけるのは複雑です。

これは可能ですか?可能であれば、保存または削除操作をキャンセルして失敗させるにはどうすればよいですか? モデルでこれを行うのが悪い習慣である場合、どこでこれを行う必要がありますか?

4

3 に答える 3

2

あなたが説明することはおそらく可能ですが、それは信じられないほど悪い考えです。画像のダウンロードには時間がかかる場合があります。Core Data への変更の保存には、すでにしばらく時間がかかる場合があります。保存はイメージを必要とするすべてのインスタンスに影響を与えるため、長時間かかる可能性のある操作を、途方もなく、非常に、非常に長い操作に変えることになります。すべての画像のダウンロードが完了するまで保存は完了しません。これは非常に不合理な依存関係です。

画像のダウンロードと変更の保存を互いに完全に切り離した方が、はるかにはるかに優れています。画像を個別にダウンロードします。オブジェクトの画像が利用できない場合は、何らかのプレースホルダーを使用してください。

于 2013-10-04T17:17:52.933 に答える
0

MVCS (Model View Controller Service / Model View Controller Store) に興味があると思います。ロジックを Store レイヤーに移動できます。イメージのダウンロードを非同期で実行しNSManagedObject、ダウンロードが正常に完了した場合は作成します。

それに関する情報は、MVCS - Model View Controller Serviceおよびhttps://softwareengineering.stackexchange.com/questions/184396/mvcs-model-view-controller-storeで見つけることができます。

于 2013-10-04T16:27:45.923 に答える
0

ダウンロード プロセスを開始する代わりに、1 つのオブジェクトだけでなく管理対象オブジェクト コンテキスト全体save:を保存するので、最初にダウンロードを開始します。ダウンロードが成功した場合は、イメージをディスクに書き込んで更新し、変更を保存できます。失敗した場合は、保存する必要はまったくありません。localPath

于 2013-10-04T16:20:06.250 に答える