2016-05-03 41 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

あなたは、配列内の適切値を取得しています。 –

+0

は3行を返します。しかし、表示することはできません。 – Alamin

+0

if mBorrowValue = self.borrower [indexPath.row] as?文字列{cell.borrowerName.text = mBorrowValue} else {cell.borrowerName.text = "データなし"}この方法で一度試してください –

答えて

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編集:

私は、私は本当にあなたの代わりに辞書

var borrower:[Borrower] = [] 

とクエリで次のことが可能となり

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

のここでのカスタムオブジェクトを使用すべきだと思うことを言いたいん:

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

まず、dataSourcedelegate foを設定してくださいあなたのビューコントローラへのあなたのテーブルビュー。その後、tableView:numberOfRowsInSectionを実装しない限り、関数tableView:cellForRowAtIndexPath:は呼び出されません。 queryBorrower.findObjectsInBackgroundWithBlock {の内部コードがバックグラウンドで実際にある場合

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

また、あなたがメインスレッドにあなたのテーブルビューのリロードを派遣する必要があります。その関数のデフォルトの実装では、これを実装する0トライを返します。このように:はい、その後dataqueryメソッドの実行が何行が、その後は値が表示されませんならば、それは返す行数、チェックするためにテーブルビュー方式のnumberofrowにブレークポイントを置いた後、場合

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

私のコードは、単一の列の値を取得し、その値を 'borrower'配列に格納するときの仕事です。しかし、私は行の値を取得し、その行を辞書に格納しようとしているときに働いていないし、その後、その辞書の 'borrower'配列を作成しています。 – Alamin

関連する問題