【问题标题】:How do I fill these arrays in order to then populate a tableView?如何填充这些数组以便随后填充 tableView?
【发布时间】:2016-04-09 16:50:08
【问题描述】:

我正在尝试从后端获取一些数据,然后将其分配给 3 个不同的数组。然后我想用这些数组来填充我的 tableViewCells。问题是,当我在 fetch 块之外打印我的数组时,它们返回 nil。当我在 fetch 块中打印它们时,它们会返回我打算这样做的对象的变量。

我包含 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()     
}

【问题讨论】:

    标签: ios arrays swift uitableview pfquery


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的,这是有道理的。但是现在当我添加 self.tableView.reloadData() 应用程序崩溃并显示以下错误消息:致命错误:在展开可选值时意外发现 nil
    • 您需要找出它的来源。从字面上看,过去的数千个问题的标题或问题中的短语“unexpectedly found nil while unwrapping an Optional value”。
    • 寻找“!”。在任何地方使用强制展开的可选!是嫌疑人。
    猜你喜欢
    • 2023-03-06
    • 2013-10-31
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多