2016-05-03 2 views
1

Я пытаюсь извлечь каждую строку из базы данных и сохранить значение в словаре. После этого я создал массив словаря. Но когда я пытаюсь показать каждое значение словаря в ячейке таблицы, я не могу. Вот мой кодНе удается представить данные в ячейке вида таблицы

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

вы получаете значение правильно в массиве, если да, то после dataquery выполнения метода поставил точку останова на numberofrow метода Tableview, чтобы проверить, сколько строк возвращаются, если ни одна строка, то значение не будет показано. –

+0

вернуться 3 строки. Но не могу показать. – Alamin

+0

если пусть mBorrowValue = self.borrower [indexPath.row] as? String {cell.borrowerName.text = mBorrowValue} else {cell.borrowerName.text = "no data"} таким образом попробуйте один раз –

ответ

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]] = [] 

Extr редактировать:

Я хочу сказать, что я действительно думаю, что вы должны использовать пользовательский объект здесь вместо словаря

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)) 
    } 
} 
+0

Я все это сделал. – Alamin

+0

Если вы установили точку останова в cellForRowAtIndexPath, вы когда-нибудь там ломались? – Moriya

+0

Я думаю, вы понимаете мою проблему. Я использую ваш код. Но показывая эту ошибку «Неоднозначное использование индекса» – Alamin

0

Вы должны реализовать numberOf... DATASOURCE делегат первый:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int 

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

Прежде всего, убедитесь, что вы установили dataSource и delegate fo Посмотрите на свой вид таблицы на ваш контроллер. Тогда функция tableView:cellForRowAtIndexPath: никогда не будет вызвана, если вы не реализуете tableView:numberOfRowsInSection. Реализация по умолчанию этой функции возвращает 0. Try реализующего это:

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() 
}) 
+0

Мой код работает, когда я извлекаю значение одного столбца и сохраняю это значение в массиве 'заемщик'. Но не работает, когда я пытаюсь получить значение строки и сохранить эту строку в словаре, и после этого создаю массив 'заемщика' этого словаря. – Alamin

Смежные вопросы