- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经为这个错误苦苦挣扎了几天......所以我有一个函数应该从在线 txt 文件下载一些数据然后返回它。奇怪的是,当我在模拟器中尝试或者连接我的 iPhone 并在那里下载时,它完全有效。但是一旦我开始在 TestFlight 中测试它,这个功能就根本不起作用了。
这是函数代码:
public static func loadSomeData() -> String {
let url = URL(string: "https://myurl.com/file.txt")!
var input = ""
let task = URLSession.shared.downloadTask(with: url) { localURL, urlResponse, error in
if let localURL = localURL {
if let string = try? String(contentsOf: localURL) {
input = string
}
}
}
task.resume()
while !input.isEmpty {
// Waits until the data is loaded
}
return input
}
此外,虽然地址是 HTTPS,但我仍然允许在 plist 文件中任意加载。
非常感谢您的宝贵时间和正手可能的答案!
最佳答案
正如 David S 所说,你不想做这样的繁忙循环。您需要做的是传入一个完成处理程序并让网络请求异步运行。像这样的事情应该可以解决问题。
class Loader {
enum Error: Swift.Error {
case badURL
case badData
case other(Swift.Error)
}
public func loadSomeData(then block: @escaping(Result<String, Error>) -> Void) {
let url = URL(string: "https://www.w3.org/TR/PNG/iso_8859-1.txt")!
let task = URLSession.shared.downloadTask(with: url) { localURL, urlResponse, error in
guard error == nil else {
block(.failure(.other(error!)))
return
}
guard let localURL = localURL else {
block(.failure(.badURL))
return
}
guard let string = try? String(contentsOf: localURL) else {
block(.failure(.badData))
return
}
block(.success(string))
}
task.resume()
}
}
然后你就可以这样做来获取你需要的任何数据。
let loader = Loader()
loader.loadSomeData { result in
switch result {
case .success(let string):
print("SUCCESS: \(string)")
case .failure(let error):
print("ERROR: \(error)")
}
}
关于ios - Swift:URLSession.shared.downloadTask 仅在模拟器中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59146156/
我有以下代码我把它放在点击我想把 urlAll(源代码)放在 AlertDialog String urlAll="localhost/admin"; new Down
我想创建文件下载管理器来下载多个具有下载百分比和播放暂停删除功能的文件。 我尝试使用以下代码成功下载多个文件...但无法添加进度条请帮忙 for (int i = 0; i 然后您需要遵循以下代码:
我已经更新了 Advanced NSOperations将示例应用程序添加到 Swift 3。唯一剩下的构建错误是来自 DownloadEarthquakesOperation 类的这段代码。
我需要定期执行任务,准确地说是一天一次,因此我使用 23 小时的 minimumBackgroundFetchInterval 实现了后台提取。当我在前台使用我的应用程序模拟后台获取时,它就完成了。
我有一个应用程序需要下载一个可能相当大的文件(可能大到 20 MB)。我一直在阅读 URLSession downloadTasks 以及当应用程序进入后台或被 iOS 终止时它们如何工作。我希望继续
我正在构建一个应用程序,一旦它连接到特定的本地网络,它就会显示一个事件指示器,然后开始下载图像的 zip 文件,一旦图像下载完毕,它就会解压缩文件,停止指示器,然后执行 segue 以下一个 View
由于客户无法在短时间内在他的服务器上实现少量下载,并且当有这么多文件(500-1000 下载)时,backgroundDownloadTaks 非常不一致,我决定使用没有后台 NSURLSession
目前,我在使用下载任务时遇到了用户界面更新问题。以下函数应该更新用户界面,但它有时会起作用。为什么每次下载文件时都不起作用?每次调试器中都会显示 NSLog 的日志! func urlSession(
我已经为这个错误苦苦挣扎了几天......所以我有一个函数应该从在线 txt 文件下载一些数据然后返回它。奇怪的是,当我在模拟器中尝试或者连接我的 iPhone 并在那里下载时,它完全有效。但是一旦我
我正在尝试从 URL 播放音频。 var downloadTask:URLSessionDownloadTask! downloadTask = URLSession.shared.downloadT
我正在努力理解我认为很容易的东西。 我有一个 URLSession.downloadTask。我已将我的下载对象设置为 URLSession 委托(delegate),并且以下委托(delegate)
这是我的下载函数: // Download a file from the url to the local directory class func downloadUrl(url: URL, to
如果我通过 nsurlsession 创建 DownloadTask,/Developer/tmp/文件夹中有一个名为 'CFNetworkDownload_1vY41L.tmp' 的 tmp 文件。
我正在尝试使用 swift 3 上的 downloadTask 后台函数获取 URL 的内容。使用 dataTask,一切正常。但是,在使用 downloadTask 函数时,将调用我的 didCom
我有一个基本的 viewController,它带有一个按钮,当点击该按钮时,它会调用一个方法开始从给定的有效 url 下载图像。 我非常小心地将任何强指针传递给 View Controller 。而
我有一个必须下载多个大文件的应用程序。我希望它按顺序而不是同时下载每个文件。当它同时运行时,应用程序会过载并崩溃。 所以。我试图将 downloadTaskWithURL 包装在 NSBlockOpe
我的应用程序中的 NSURLSessionDownloadTask 有问题我用代码创建了数百个下载任务: NSURLSessionDownloadTask * task = [_urlSession
我正在使用标准后台 session 来处理后台提取。操作开始正常并回调: URLSession(session:downloadTask:didFinishDownloadingToURL locat
我尝试使用 session 下载任务下载多个文件,并发生以下情况: 首次下载开始。我猜它会创建一个临时文件,例如 CFNetworkDownload_Kx54Ke.tmp。 在我的第二次下载开始后不久
使用 Swift-4.0.3、iOS-11.2、Xcode-9.2、iPhone-6S(或 Simulator-10.0) 大约一个星期以来,我试图找出以下问题的原因:每当您重新输入涉及 URLSes
我是一名优秀的程序员,十分优秀!