我有一个 for 循环,它会遍历我的 URL 记录并发出请求。请求的结果被再次用于上传其他待处理的内容。但我在这一行中收到错误:print("id is\(t.url!)")
。我猜当执行该行代码时循环已经完成,这就是它返回 nil 的原因。
您对此有什么建议吗?
let fetchRequest = NSFetchRequest(entityName:"Pending")
let company_temp = try context.executeFetchRequest(fetchRequest)
let company = company_temp as! [Pending]
for t in company {
let request = NSURLRequest(URL: NSURL(string:t.url!)!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
print("ticket is \(NSString(data: data!, encoding: NSUTF8StringEncoding))")
print("id is \(t.url!)")
print("id is \(t.id!)")
self.upload_sig(NSString(data: data!, encoding: NSUTF8StringEncoding)!, id: t.id!)
}
最佳答案
很难说为什么它不起作用,但我猜想托管对象要么不再存在,要么它所在的上下文已被破坏,所以它无法填充它的数据,而你出现错误。
在您的特定情况下,您实际上不需要在处理 URL 请求完成的代码中使用该对象,因此不要将其保留在那里。相反,只捕获您需要的 id 而不是容器:
let request = NSURLRequest(URL: NSURL(string:t.url!)!)
let objectId = i.id!
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
print("ticket is \(NSString(data: data!, encoding: NSUTF8StringEncoding))")
print("id is \(objectId)")
self.upload_sig(NSString(data: data!, encoding: NSUTF8StringEncoding)!, id: objectId)
另请注意,您应该使用 !谨慎地检查错误
...
关于swift - 保留循环内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36696543/