![](/img/trans.png)
[英]Swiftui FileManager/URLSession not writing to documentDirectory when running as background task
[英]Swiftui Task not running in Background task
我已經在我的應用程序上成功配置了后台任務,其中一個函數將直接調用 URL 並處理數據,但我最近更改了這一點,以便函數調用 URL,保存到文檔目錄,然后處理數據。 由於我已經更新了這個,我的后台任務不再觸發。
在對上一個問題提出建議后,我嘗試將函數包裝在Task
中,但我無法讓后台任務完全觸發/完成。 有時它只會打印運行打印,有時它只會重新安排下一次更新,有時它會打印和安排但任務似乎永遠不會運行。 任何幫助將非常感激。 謝謝!
27/06 更新:自發布以來,我對此進行了更多故障排除,看起來問題不在於任務正在運行,而是應用程序未處理let (url, response) = try await session.download(for: request)
在后台任務中的函數內。
這在應用程序中按預期運行,但在后台任務時無法完成。 是否需要任何其他步驟或配置更改才能將此作為后台任務運行? 干杯
BG處理任務:
func handleAppRefresh(task: BGProcessingTask) {
//Schedules another refresh
scheduleAppRefresh()
Task.detached {
do {
print("BGTask fired")
let events = try await BGloadCSV(from: "Eventtest")
print(events)
} catch {
print(error)
}
}
print("handleAppRefresh fired")
}
運行函數:
func BGloadCSV(from csvName: String) async throws -> [CSVEvent] {
var csvToStruct = [CSVEvent]()
// Creates destination filepath & filename
let documentsUrl:URL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL?)!
let destinationFileUrl = documentsUrl.appendingPathComponent("testcsv.csv")
//Create URL to the source file to be downloaded
let fileURL = URL(string: "https://example.com/testcsv.csv")!
let sessionConfig = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfig)
let request = URLRequest(url:fileURL)
let (url, response) = try await session.download(for: request)
if let statusCode = (response as? HTTPURLResponse)?.statusCode {
print("File downloaded Successfully. Response: \(statusCode)")
}
let _ = try FileManager.default.replaceItemAt(destinationFileUrl, withItemAt: url)
let data = readCSV(inputFile: "testcsv.csv")
var rows = data.components(separatedBy: "\n")
rows.removeFirst()
// Iterates through each row and sets values
for row in rows {
let csvColumns = row.components(separatedBy: ",")
let csveventStruct = CSVEvent.init(raw: csvColumns)
csvToStruct.append(csveventStruct)
}
print("LoadCSV has run and created testcsv.csv")
pullData(events: csvToStruct)
return csvToStruct
}
在本文和提供的示例項目的幫助下,我能夠將 URLSession 重新創建為后台任務。
https://www.ralfebert.com/ios-examples/networking/urlsession-background-downloads/
希望它在未來對其他人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.