当我从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,现在下载时间是正确的,所以我将保留此错误,并使用此代码。
谢谢大家的帮助,我投票支持所有有用的答案
错误/警告可能与您的代码无关。
SO_NOAPNFALLBK消息见这里,其余的见这里。
这些无用的日志总是显示在XCode 8上。设置环境变量 OS_ACTIVITY_MODE
= 在 XCode 编辑方案
上禁用
-
原则:
1.Download任何文件或图像通过子线程
与异步
2.After下载,更新图像到UI通过主线程
与同步
这很容易解决。
您必须在主队列上执行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数组,我必须加载所有图像并将其放入图像数组。 我在试这个 但它不起作用。我该怎么做?