当前位置: 首页 > 知识库问答 >
问题:

从url下载图像,收到错误“nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed”

堵德曜
2023-03-14

当我从URL下载图像时,大约需要6秒(即使图像不是高清的),并且日志中出现错误。

这是我下载图像的代码

let backgroundQueue = DispatchQueue(label: "my.bk.job", qos: .background, target: nil)
    
backgroundQueue.async {
    let url = URL(string: "https://url/img.jpg")
    let data = try? Data(contentsOf: url!)
    //Show the image
}

这是我得到的日志错误:

2016-12-18 16:16:17.243477 yolo[1111:33384] [] nw_host_stats_add_src recv too small, received 24, expected 28
2016-12-18 16:16:17.247960 yolo[1111:33384] [] __nwlog_err_simulate_crash simulate crash already simulated "nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available"
2016-12-18 16:16:17.248434 yolo[1111:33384] [] nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK failed: [42] Protocol not available, dumping backtrace:
        [x86_64] libnetcore-856.30.16
    0   libsystem_network.dylib             0x000000010c1b7666 __nw_create_backtrace_string + 123
    1   libnetwork.dylib                    0x000000010c495006 nw_socket_add_input_handler + 3164
    2   libnetwork.dylib                    0x000000010c472555 nw_endpoint_flow_attach_protocols + 3768
    3   libnetwork.dylib                    0x000000010c471572 nw_endpoint_flow_setup_socket + 563
    4   libnetwork.dylib                    0x000000010c470298 -[NWConcrete_nw_endpoint_flow startWithHandler:] + 2612
    5   libnetwork.dylib                    0x000000010c48bae1 nw_endpoint_handler_path_change + 1261
    6   libnetwork.dylib                    0x000000010c48b510 nw_endpoint_handler_start + 570
    7   libnetwork.dylib                    0x000000010c4a31f9 nw_endpoint_resolver_start_next_child + 2240
    8   libdispatch.dylib                   0x000000010bf34978 _dispatch_call_block_and_release + 12
    9   libdispatch.dylib                   0x000000010bf5e0cd _dispatch_client_callout + 8
    10  libdispatch.dylib                   0x000000010bf3be17 _dispatch_queue_serial_drain + 236
    11  libdispatch.dylib                   0x000000010bf3cb4b _dispatch_queue_invoke + 1073
    12  libdispatch.dylib                   0x000000010bf3f385 _dispatch_root_queue_drain + 720
    13  libdispatch.dylib                   0x000000010bf3f059 _dispatch_worker_thread3 + 123
    14  libsystem_pthread.dylib             0x000000010c3074de _pthread_wqthread + 1129
    15  libsystem_pthread.dylib             0x000000010c305341 start_wqthread + 13

代码工作,因为我可以看到图像,但很慢,这个错误对我来说不是很好,我做错了什么?(我用的是Swift 3)

编辑:

我在一个白色的新项目中尝试了这段代码,但实际上什么都没有,但仍然收到了它。

我也复制/粘贴了这段代码,但是得到了同样的错误。

我更改了URL,现在下载时间是正确的,所以我将保留此错误,并使用此代码。

谢谢大家的帮助,我投票支持所有有用的答案

共有3个答案

余信然
2023-03-14

错误/警告可能与您的代码无关。

SO_NOAPNFALLBK消息见这里,其余的见这里。

危宜
2023-03-14

这些无用的日志总是显示在XCode 8上。设置环境变量 OS_ACTIVITY_MODE = 在 XCode 编辑方案禁用 -

原则:

1.Download任何文件或图像通过子线程异步2.After下载,更新图像到UI通过主线程同步

这很容易解决。

徐英锐
2023-03-14

您必须在主队列上执行UI操作:

backgroundQueue.async {
    let url = URL(string: "https://url/img.jpg")
    let data = try? Data(contentsOf: url!)
    DispatchQueue.main.async {
        //Show the image
    }
}
 类似资料:
  • 问题内容: 我想从我的应用程序中的URL加载图像,因此我首先尝试使用Objective-C,但是它可以正常工作,但是对于Swift,我遇到了编译错误: ‘imageWithData’不可用:使用对象构造’UIImage(data :)’ 我的功能: 在Objective-C中: 有人可以解释一下为什么Swift无法使用它,以及如何解决该问题。 问题答案: Xcode 8或更高版本•Swift 3或

  • 我想从我的应用程序中的URL加载一个图像,所以我首先尝试使用Objective-C,它成功了,但是,使用Swift,我有一个编译错误: “imageWithData”不可用:使用对象构造“UIImage(数据:)” 我的职能: 在目标C中: 有人能给我解释一下为什么不能与Swift一起工作,以及我如何解决这个问题。

  • 问题内容: 我正在尝试使用我的应用程序中的URL和按钮下载图像。当我在手机上运行它时,我无法下载该图像。任何人都可以指出这个问题。我在这里先向您的帮助表示感谢 :) 这是我的代码。 问题答案: 您可以通过两种方式从url下载图像 1。您 可以使用Glide库从url加载图像,看下面的代码,它可以轻松地为您提供帮助 编译这个库 而不是像这样加载图像 2。如果您不想使用第三方库,请尝试此 创建一个异步

  • 这是我为从url下载图像而编写的代码,但使用java.io.FileNotFoundException重新引用响应代码400

  • 我需要设置公司代理,以便Docker可以从公共注册表下载图像。 我使用Ubuntu 12.04机器。我找到了这个答案,但是在Ubuntu 12.04中不存在。我该怎么做呢? 谢谢

  • 我有一个url数组,我必须加载所有图像并将其放入图像数组。 我在试这个 但它不起作用。我该怎么做?