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];
我有 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];