从网址下载图片,记录错误

时间:2016-12-18 15:29:42

标签: ios swift

当我从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太小,收到24,预计28   2016-12-18 16:16:17.247960 yolo [1111:33384] [] __nwlog_err_simulate_crash模拟已经模拟的崩溃“nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK失败:[42]协议不可用”   2016-12-18 16:16:17.248434 yolo [1111:33384] [] nw_socket_set_common_sockopts setsockopt SO_NOAPNFALLBK失败:[42]协议不可用,转储回溯:           [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)

编辑:

我在一个白色的新项目中尝试了代码,几乎没有任何东西,但仍然收到它。

我也复制/粘贴了this代码但得到了相同的错误。

我更改了网址,现在下载时间正确,所以我会保留此错误,我将使用此代码。

谢谢大家的帮助,我提出了所有有用的答案

3 个答案:

答案 0 :(得分:3)

您必须在主队列上执行UI内容:

backgroundQueue.async {
    let url = URL(string: "https://url/img.jpg")
    let data = try? Data(contentsOf: url!)
    DispatchQueue.main.async {
        //Show the image
    }
}

答案 1 :(得分:2)

这些无用的日志始终显示在XCode 8上。在XCode上设置环境变量OS_ACTIVITY_MODE = Disable Edit Scheme - >如果您不想看到它们,请添加Arguments

原理:

  
    

1.使用sub thread通过async下载任何文件或图片     2.下载后,使用main thread

通过sync将图片更新为用户界面   

这很容易解决。

答案 2 :(得分:0)

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

有关SO_NOAPNFALLBK消息,请参阅here,其余消息请见here