无法在表格视图单元格中显示数据

时间:2016-05-03 17:31:57

标签: ios swift dictionary

我试图从数据库中检索每一行并在字典中保留值。之后我创建了一个字典数组。但是当我试图在表格单元格中显示字典的每个值时,我不能。这是我的代码

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
   var borrowerInformation:NSMutableDictionary? = NSMutableDictionary();
   var borrowerName:String = ""
   var givenDate:String = ""
   var borrower:NSMutableArray = []

   override func viewDidLoad() {
      super.viewDidLoad()
      dataQuery()
   }
  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
    return self.borrower.count

  }
   func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{

      let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! BorrowerLanderTableViewCell

      cell.borrowerName.text = self.borrower[indexPath.row]  as? String

     return cell
  }

  func dataQuery(){
    let queryBorrower = PFQuery(className:"BorrowerLander")
    queryBorrower.whereKey("borrowerLander", equalTo: 0)
    queryBorrower.whereKey("userId", equalTo: (PFUser.currentUser()?.objectId)!)
    queryBorrower.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]?, error: NSError?) -> Void in
        self.borrower = NSMutableArray()
        if error == nil {
            if let borrowerData = objects {
                for object in borrowerData {
                    self.borrowerName = object["name"] as! String
                    self.givenDate = object["givenDate"] as! String
                    self.borrowerInformation = [ "borrowerName": self.borrowerName,"givenDate":"self.givenDate"]
                    self.borrower.addObject(self.borrowerInformation!)
                }
            }


        } 
        self.tableview.reloadData()
    }
 }
}

在这里,我刚刚添加了代码的主要部分。请告诉我如何在表格视图单元格中显示字典数组的值?

3 个答案:

答案 0 :(得分:2)

我不知道您是如何进行设置的,但问题可能是您没有将tableviews委托和数据源设置为您正在使用的控制器。

self.tableView.dataSource = self
self.tableView.delegate = self

我也想知道你是否实现了numberOfRows和numberOfSections委托方法。

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

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

同样在设置文本时,您需要实际使用添加到词典中的名称字符串

let borrower = self.borrower[indexPath.row]
if let name = borrower["borrowerName"] as? String{
    cell.borrowerName.text = name
} esle {
    cell.borrowerName.text = "error" 
}

同时将数据数组声明为

var borrower:[[String: AnyObject]] = []

额外编辑:

我想说我真的认为你应该在这里使用自定义对象而不是字典

class Borrower {
    var name: String
    var givenDate: String
//etc.
    init(name: String, givenDate: String) {
        self.name = name
        self.givenDate = givenDate
    }
}

启用以下

var borrower:[Borrower] = []

并在查询中:

for object in borrowerData {
    if let name = object["name"] as? String, givenDate = object["givenDate"] as? String {
        self.borrower.append(Borrower(name: name, givenDate: giverDate))
    }
}

答案 1 :(得分:1)

首先,确保已将表格视图的dataSourcedelegate设置为视图控制器。然后,除非您实现tableView:cellForRowAtIndexPath:,否则永远不会调用函数tableView:numberOfRowsInSection。该函数的默认实现返回0.尝试实现此:

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

此外,如果queryBorrower.findObjectsInBackgroundWithBlock {内的代码实际上在后台,则需要将表视图重新加载到主线程。像这样:

dispatch_async(dispatch_get_main_queue(), { [weak self] () -> Void in
    self?.tableView.reloadData()
})

答案 2 :(得分:0)

您需要先实现numberOf... dataSource委托:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int