- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用程序中,用户可以随时取消下载。我通过调用 [task cancelByProducingResumeData:
取消下载。它在大多数情况下工作正常,但是,如果下载任务在启动/恢复后立即取消,它会使 nsnetwork 守护程序崩溃。这是导致守护程序在 iOS 7.0 上 100% 崩溃的示例代码。这个问题不会发生在 iOS 7.1 上!
NSURLSession *ses = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration backgroundSessionConfiguration:@"aaa"] delegate:self delegateQueue:nil];
NSURLSessionDownloadTask *dTask = [ses downloadTaskWithRequest:request];
[dTask resume];
[ses getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) {
NSLog(@"%@", downloadTasks);
if (downloadTasks.count>0)
{
for (NSURLSessionDownloadTask *task in downloadTasks)
{
NSLog(@"cancelling : %@", task);
[task cancelByProducingResumeData:^(NSData *resumeData) {
NSLog(@"Cancelled");
}];
}
}
}];
这是崩溃日志:
Aug 13 16:15:06 Dev-iPhone backgroundTesting[4848] <Warning>: (
"<__NSCFBackgroundDownloadTask: 0x1659cf80>"
)
Aug 13 16:15:06 Dev-iPhone backgroundTesting[4848] <Warning>: cancelling : <__NSCFBackgroundDownloadTask: 0x1659cf80>
Aug 13 16:15:06 Dev-iPhone nsnetworkd[4827] <Error>: Property list invalid for format: 100 (property lists cannot contain NULL)
Aug 13 16:15:06 Dev-iPhone nsnetworkd[4827] <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: NSURLSessionDownloadTaskResumeData)'
*** First throw call stack:
(0x2e469e8b 0x387636c7 0x2e3a4f9b 0x2e08b3d3 0x2e0ccee1 0x38c48103 0x38c4ce77 0x38c49f9b 0x38c4d751 0x38c4d9d1 0x38d77dff 0x38d77cc4)
Aug 13 16:15:06 Dev-iPhone ReportCrash[4849] <Notice>: ReportCrash acting against PID 4827
Aug 13 16:15:06 Dev-iPhone ReportCrash[4849] <Notice>: Formulating crash report for process nsnetworkd[4827]
Aug 13 16:15:06 Dev-iPhone com.apple.launchd[1] (com.apple.nsnetworkd[4827]) <Warning>: (com.apple.nsnetworkd) Job appears to have crashed: Abort trap: 6
是否有一种解决方法可以安全地取消下载而不会使 nsnetwork 守护进程崩溃?谢谢!
最佳答案
看异常感觉是daemon无法生成resume数据。当然这是 iOS 中的错误,但作为解决方法,您可以做的是不允许取消,除非您收到一些字节,在这种情况下,守护进程应该能够生成正确的恢复数据。
关于ios - (NSURLSessionDownloadTask cancelByProducingResumeData) 崩溃 nsnetwork 守护进程 iOS 7.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297750/
我需要暂停下载任务并在应用重启后继续下载。但我不确定应该使用哪种方法,suspend 或 cancelByProducingResumeData。 使用 cancelByProducingResume
我想在用户取消下载或发生错误后继续下载。但是当我调用 cancelByProducingResumeData 方法时,resumeData 为 nil。所以,我无法恢复下载。我确定下载链接可以恢复,因
我正在 AFNetworking 的帮助下下载大文件 ~50-100Mb,我想在应用程序终止时保存它的下载状态以便稍后恢复下载。我已注册我的对象以终止通知: [[NSNotificationCente
我试图在应用程序终止时访问下载文件的 resumeData。我试过从 appDelegate 中的 willEnterBackground 和 willTerminate 调用方法。 我可以从 Vie
在我的应用程序中,用户可以随时取消下载。我通过调用 [task cancelByProducingResumeData: 取消下载。它在大多数情况下工作正常,但是,如果下载任务在启动/恢复后立即取消,
我是一名优秀的程序员,十分优秀!