NSURLSessionDataTask 取消和核心数据

NSURLSessionDataTask cancel and Core Data

我有 NSURLSession,它从服务器下载新的用户配置文件,然后为每个配置文件下载一系列照片,然后存储在 Core Data 中。每次用户到达此屏幕时,我都会停止下载任务,清除核心数据,然后再次填充它。问题是,cancel() 函数是异步的,所以它在我清除核心数据后设法保存了一些配置文件。此外,由于数据任务取消,这些配置文件可以没有一些数据。 那么,问题如下——如何正确完成下载任务,然后清除核心数据?提前致谢。

我建议使用 NSOperation class 来满足您的需求。

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/NSOperation_class/

您应该结束将数据下载到 NSOperation 的操作 class,并且在将结果添加到 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];