跟踪哪些上传有效?

时间:2019-10-31 22:01:49

标签: ios swift

我正在尝试使用PHP将记录从Core Data上载到SQL Server。一次上传一个记录可以很好地工作,但是由于uploadTask是异步的,因此我很难弄清楚如何跟踪哪个记录是成功的(因此我可以将其从Core Data中删除)。当我调用URLSession.shared.uploadTask时,我向它传递了一个完成处理程序,无论如何,当调用该处理程序时,我是否可以访问用于调用它的实际数据记录?

for data in result {
    let parameters: [String: Any] = [ "date": data.value(forKey: "date") ?? -999]
    let uploadData = parameters.percentEscaped().data(using: .utf8)
    let task = URLSession.shared.uploadTask(with: urlrequest, from: uploadData) { httpdata, response, error in
            if let error = error {
                print ("error: \(error)")
                return
            }
            data.setValue(1, forKey: "toBeDeleted")
        }

        task.resume() 
}

我试图在完成块(在完成块外部定义)中设置的“数据”对象不是我想的那样!

1 个答案:

答案 0 :(得分:0)

代码底部的data(如果您明白我的意思)总是与代码顶部的data相同(在for循环中) 。我唯一能看到您可能做错的是您在说

data.setValue(1, forKey: "toBeDeleted")

无需担心您正在使用哪个线程。您应该进入主线程,以免与其他线程上的数据通信:

DispatchQueue.main.async {
    data.setValue(1, forKey: "toBeDeleted")
}

如果这不起作用,则问题出在其他地方,即result不包含您认为确实有用的数据。

(实际上,我不明白为什么要麻烦设置data的任何值。如果您的目标是与数据库对话并删除该对象,请立即在此处立即将其删除。否则,问题是您何时会真正查找这些要删除的记录并将其删除。)