jjzjj

ios - (NSURLSessionDownloadTask cancelByProducingResumeData) 崩溃 nsnetwork 守护进程 iOS 7.0

coder 2024-01-24 原文

在我的应用程序中,用户可以随时取消下载。我通过调用 [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/

有关ios - (NSURLSessionDownloadTask cancelByProducingResumeData) 崩溃 nsnetwork 守护进程 iOS 7.0的更多相关文章

  1. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  2. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  3. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  4. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  7. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  8. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

  9. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  10. ruby - 为什么不能使用类IO的实例方法noecho? - 2

    print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上

随机推荐