gpt4 book ai didi

ios - Swift - 用数据填充 TableView

转载 作者:行者123 更新时间:2023-11-29 01:17:38 26 4
gpt4 key购买 nike

我正在尝试从 Parse 获取数据并填充 TableView Controller 。我在 VC 中定义了以下内容:

class OrdersViewController: UITableViewController{


/*************************Global Objects************************/
var userObject = UserClass()
var utilities = Utilities()
var orderObject = OrderClass()
var objectsArray:[PFObject]!
/*************************UI Components************************/

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
tableView.delegate = self
tableView.dataSource = self
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
SwiftSpinner.show("Please Wait...Populating Table")

let query = PFQuery(className:"Orders")
query.whereKey("appUsername", equalTo:PFUser.currentUser()!["appUsername"])
query.findObjectsInBackgroundWithBlock {
(objects: [PFObject]?, error: NSError?) -> Void in

if error == nil {
SwiftSpinner.hide()
self.objectsArray = objects
} else {
SwiftSpinner.hide()

// Log details of the failure
print("Error: \(error!) \(error!.userInfo)")
}
}

SwiftSpinner.hide()
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return objectsArray.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier = "cell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! OrderCell

let row = indexPath.row
cell.orderRetailerName.text = objectsArray[row]["nameRetailer"] as? String
cell.status.text = objectsArray[row]["status"] as? String
cell.dueDate.text = objectsArray[row]["dueDate"] as? String

return cell
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
/*tableView.deselectRowAtIndexPath(indexPath, animated: true)

let row = indexPath.row
print("")*/
}

}

在 viewWillAppear 中,我试图从 Parse 后端获取数据并用它填充表。当我运行该程序时,出现以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

错误是由 numberOfRowsInSection 中的 objectsArray.count 行引起的。很公平......它正在尝试获取计数,但显然数组是空的,因为获取数据的作业正在后台运行并且尚未完成。这就是我需要帮助的。我是否将获取代码放在正确的位置(即 viewWillAppear)?如果不是,我应该把它放在哪里以确保它在表实际尝试加载之前执行。

谢谢,

最佳答案

您必须像其他数组一样初始化 PFObject 数组。

var objectsArray = [PFObject]()

并且您必须在填充 objectsArray 后立即在主线程上的 TableView 实例上调用 reloadData()

query.findObjectsInBackgroundWithBlock {(objects: [PFObject]?, error: NSError?) -> Void in
if error == nil {
self.objectsArray = objects!
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
} else {
// Log details of the failure
print("Error: \(error!) \(error!.userInfo)")
}
SwiftSpinner.hide()
}

关于ios - Swift - 用数据填充 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34975322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com