我试图从数据库中检索每一行并在字典中保留值。之后我创建了一个字典数组。但是当我试图在表格单元格中显示字典的每个值时,我不能。这是我的代码
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()
}
}
}
在这里,我刚刚添加了代码的主要部分。请告诉我如何在表格视图单元格中显示字典数组的值?
答案 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)
首先,确保已将表格视图的dataSource
和delegate
设置为视图控制器。然后,除非您实现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