サーバーから新しいユーザープロファイルをダウンロードし、プロファイルごとに写真の配列をダウンロードし、コアデータに保存するNSURLSessionがあります。ユーザーがこの画面に到達するたびに、タスクのダウンロードを停止し、コアデータをクリアしてから、再度入力します。問題は、cancel() 関数が非同期であるため、Core Data をクリアした後にいくつかのプロファイルを保存できることです。さらに、これらのプロファイルは、datatask cancel のおかげで一部のデータがなくてもかまいません。それで、問題は次のとおりです-ダウンロードタスクを正しく完了し、その後コアデータをクリアする方法は?前もって感謝します。
質問する
604 次
1 に答える
2
NSOperation
必要なものにはクラスを使用することをお勧めします。
https://developer.apple.com/library/ios/documentation/Cocoa/Reference/NSOperation_class/
データを NSOperation クラスにダウンロードするための操作をまとめる必要があります。結果を CoreData に追加する前に、間に NSOperation がキャンセルされたかどうかを確認できます。
@interface DownloadOperation: NSOperation
@end
@implementation DownloadOperation
- (void)main {
@autoreleasepool {
[Server downloadDataFromServer:^(id results) {
if (self.isCancelled == NO)
{
[CoreData saveResults:results];
}
}];
}
}
@end
操作を NSOperationQueue に追加します。
NSOperationQueue *queue= [[NSOperationQueue alloc] init];
[queue addOperation:[[DownloadOperation alloc] init]];
また、次のように呼び出してキャンセルできます。
[operation cancel];
またはすべての操作をキャンセルします。
[queue cancelAllOperations];
于 2015-09-01T20:16:42.597 に答える