2017-02-01 7 views
0

レルムデータベースからデータを正常にダウンロードして印刷しています。ここに私のログがあります:レルムデータベースのtableview内のアイテムのリスト

Item(id: Optional(0), name: Optional("Item (0)"), descr: Optional("Description of item (0)"), 
    icon: Optional("http://192.168.1.101:8080/api/items/0/icon.png"), 
    url: Optional("http://192.168.1.101:8080/api/items/0"))) 

実際のリストにこれらの値を割り当てる必要があります。私はきれいなシートテーブルビューを取得しています。どのようにそれを正しく行うには?私は.xibをtablewViewCellとして使用しています。私はどんなヒントにも感謝しています。

class ItemRealm : Object { 
    dynamic var id = 0 
    dynamic var name = "" 
    dynamic var desc = "" 
    dynamic var icon = "" 


    override class func primaryKey() -> String? { 
     return "id" 
    } 
} 


class ViewController: UIViewController, UITableViewDataSource, UISearchBarDelegate { 

    @IBOutlet weak var searchBar: UISearchBar! 
    @IBOutlet weak var tableView: UITableView! 


    let realm = try! Realm() 
    let results = try! Realm().objects(ItemRealm.self).sorted(byKeyPath: "id") 

    let SERVER_URL = "http://192.168.1.101:8080/api/items" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     Alamofire.request(SERVER_URL).responseJSON { response in 
      let items = [Item].from(jsonArray: response.result.value as! [Gloss.JSON]) 
      print(items?[0] as Any) 

      try! self.realm.write { 
       for item in items! { 
        let itemRealm = ItemRealm() 
        itemRealm.id = item.id! 
        itemRealm.name = item.name! 
        itemRealm.desc = item.descr! 
        itemRealm.icon = item.icon! 
        self.realm.add(itemRealm) 
       } 
      } 
      _ = self.realm.objects(ItemRealm.self) 
      // print(items?[0] as Any) 
     } 
     // Do any additional setup after loading the view. 
     tableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "TableViewCell") 
    } 

    // MARK: - UITableView data source 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return results.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell") as! TableViewCell 

     var object: ItemRealm 
     object = self.results[indexPath.row] as ItemRealm 

     cell.item = object 

     return cell 
    } 

} 
+0

あなたはtableView代理人をリンクしましたか? results.countは確実に> 0で、 'cellForRowAt'はこれまで呼ばれていますか? – Russell

+0

はい、リンクされています。デバッグ後に - > po results.count - それは私に0を与えます.cellForRowは呼び出されません。 – Vuko

+0

result.count == 0の場合、 'cellForRowAt'は呼び出されません。つまり、問題はtableViewではなく、データの取得です。 – Russell

答えて

0

私は、応答からデータを取得した後に 'self.tableView.reloadData()'が見つからないと思います。フェッチしたデータを結果変数に代入することも検討してください。

+0

これは残念なことに助けにはなりません。フェッチされたデータではどういう意味ですか?例を挙げられますか? – Vuko

+0

'results'を変数に変更し、この行を 'self.tableView'の後に '_ = self.realm.objects(ItemRealm.self)'から 'self.results = self.realm.objects(ItemRealm.self)'に変更します。 .reloadData() ' –

関連する問題