gpt4 book ai didi

swift - 写入非常大的文件时应用程序卡住/锁定

转载 作者:行者123 更新时间:2023-11-30 10:15:49 29 4
gpt4 key购买 nike

我正在使用以下代码下载约 200mb 的播客并将其写入文档目录:

var podcastRequest = NSURLRequest(URL: audioUrl)
NSURLConnection.sendAsynchronousRequest(podcastRequest, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
if let myPodcastDataFromUrl = NSData(contentsOfURL: audioUrl) {

if myPodcastDataFromUrl.writeToURL(destinationUrl, atomically: true) {

// add to the array to track the download
var tempDic = self.posts[theRow] as! NSMutableDictionary as NSMutableDictionary
tempDic["downloaded"] = "true"
self.posts[theRow] = tempDic
} else {
println("Error saving file")
}
}

})

sendAsynchronousRequest 调用可防止下载期间发生锁定,但应用程序在开始实际将其写入目录时仍然会卡住。

有没有办法完全防止锁定发生,或者我是否必须一次写入较小的 block ?

最佳答案

在尝试将 200MB 写入磁盘之前,您将无法在内存中存储它,但您可以使用 downloadTaskWithURL 方法,它将文件写入临时文件夹,您可以在完成后将其移动到文档文件夹,如下所示关注。

let documentsDirectoryURL =  NSFileManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as! NSURL

NSURLSession.sharedSession().downloadTaskWithURL(audioUrl, completionHandler: {
(location, response, error) -> Void in

if let error = error {
println(error.description)
}
else {
if NSFileManager().moveItemAtURL(location, toURL: documentsDirectoryURL.URLByAppendingPathComponent(response.suggestedFilename!), error: nil) {
println("saved")
} else {
println("not saved.")
}
}
}).resume()

关于swift - 写入非常大的文件时应用程序卡住/锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063846/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com