我正在尝试使用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()
}
我试图在完成块(在完成块外部定义)中设置的“数据”对象不是我想的那样!
答案 0 :(得分:0)
代码底部的data
(如果您明白我的意思)总是与代码顶部的data
相同(在for
循环中) 。我唯一能看到您可能做错的是您在说
data.setValue(1, forKey: "toBeDeleted")
无需担心您正在使用哪个线程。您应该进入主线程,以免与其他线程上的数据通信:
DispatchQueue.main.async {
data.setValue(1, forKey: "toBeDeleted")
}
如果这不起作用,则问题出在其他地方,即result
不包含您认为确实有用的数据。
(实际上,我不明白为什么要麻烦设置data
的任何值。如果您的目标是与数据库对话并删除该对象,请立即在此处立即将其删除。否则,问题是您何时会真正查找这些要删除的记录并将其删除。)