-1

サーバーから新しいユーザープロファイルをダウンロードし、プロファイルごとに写真の配列をダウンロードし、コアデータに保存するNSURLSessionがあります。ユーザーがこの画面に到達するたびに、タスクのダウンロードを停止し、コアデータをクリアしてから、再度入力します。問題は、cancel() 関数が非同期であるため、Core Data をクリアした後にいくつかのプロファイルを保存できることです。さらに、これらのプロファイルは、datatask cancel のおかげで一部のデータがなくてもかまいません。それで、問題は次のとおりです-ダウンロードタスクを正しく完了し、その後コアデータをクリアする方法は?前もって感謝します。

4

1 に答える 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 に答える