我正在尝试从后端获取一些数据,然后将其分配给3个不同的数组。然后我想用这些数组来填充我的tableViewCells。问题是,当我在fetch块之外打印我的数组时,它们返回nil。当我在获取块中打印它们时,它们返回对象的变量,我打算这样做。
我包含self.tableView.reloadData()行,希望数组得到填充并随后填充tableViewCells,但它似乎没有工作。
欢迎任何有关如何正确填充这些数组的建议,因此当我在获取请求之外打印它们时,它们会返回相应的数据。
var capArray = [String]()
var imageDic = [String: [PFFile]]()
var priceArray = [Int]()
override func viewDidAppear(animated: Bool) {
capArray.removeAll(keepCapacity: true)
imageDic.removeAll(keepCapacity: true)
priceArray.removeAll(keepCapacity: true)
let query = PFQuery(className: "SellerObject")
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let objects = objects {
for o in objects {
if o.objectForKey("caption") != nil && o.objectForKey("imageFile") != nil && o.objectForKey("price") != nil {
let cap = o.objectForKey("caption") as? String
self.capArray.append(cap!)
let imdic = o.objectForKey("imageFile") as? [PFFile]
self.imageDic[cap!] = imdic
let price = o.objectForKey("price") as? String
let priceInt = Int(price!)
self.priceArray.append(priceInt!)
}
}
}
}
self.tableView.reloadData()
}
答案 0 :(得分:0)
您的问题是self.tableView.reloadData()在块执行完毕之前执行。
看到它工作的最简单的事情是在块中移动self.tableView.reloadData(),但这只是一个短期的黑客只是为了看到实际的事情。
但这不是正确的长期方法。为了正确地执行此操作,您的数组填充代码应该在模型中。 您的表视图最初会加载而没有数据可供使用,您的模型会在数据可用时通知您的视图控制器,然后视图控制器会更新表。
如果数据来自设备,则表视图可以在加载之前等待,如果可以快速检索数据,如果数据来自网络,则需要等待。