如何填充这些数组,然后填充tableView?

时间:2016-04-09 16:50:09

标签: ios arrays swift uitableview pfquery

我正在尝试从后端获取一些数据,然后将其分配给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()     
}

1 个答案:

答案 0 :(得分:0)

您的问题是self.tableView.reloadData()在块执行完毕之前执行。

看到它工作的最简单的事情是在块中移动self.tableView.reloadData(),但这只是一个短期的黑客只是为了看到实际的事情。

但这不是正确的长期方法。为了正确地执行此操作,您的数组填充代码应该在模型中。 您的表视图最初会加载而没有数据可供使用,您的模型会在数据可用时通知您的视图控制器,然后视图控制器会更新表。

如果数据来自设备,则表视图可以在加载之前等待,如果可以快速检索数据,如果数据来自网络,则需要等待。