2016-11-29 9 views
0

現在、firebaseデータベースのコンテンツが読み込まれているtableViewがあります。私は、セルに埋め込まれるべき特定の情報を印刷することができ、物理的にセルにデータが取り込まれていて、データが取り込まれた適切な長さにスクロールすることができます。なぜ情報にアクセスして細胞を移植するのか、データを細胞に挿入しないのかどうかはわかりません。TableViewには行は埋め込まれていますが、内容はありません

のtableView:

import UIKit 
import FirebaseAuth 
import FirebaseStorage 

class Articles: UITableViewController { 

var vcType:String = "Home" 
//var valueTopass = [[String:String]]() 
var rooms = [Room]() 
var articleCell = ArticlesCell() 

@IBOutlet weak var menuButton: UIBarButtonItem! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    if self.vcType == "Home" 
    { 
     self.rooms += ArticlesManager.sharedClient.rooms 
    } 
    else 
    { 
     if let obj = ArticlesManager.sharedClient.catRooms[self.vcType.lowercased()] //as? [Room] 
     { 
      self.rooms += obj 
     } 
    } 
    self.tableView.reloadData() 

    ArticlesManager.sharedClient.blockValueChangeInRoomArray = { 
     newRoom in 
     if self.vcType == "Home" 
     { 
      self.rooms.append(newRoom) 
      self.rooms.sort(by: { 
       if $0.created_Date == nil 
       { 
        return false 
       } 
       if $1.created_Date == nil 
       { 
        return true 
       } 

       return $0.created_Date.compare($1.created_Date) == ComparisonResult.orderedDescending 
      }) 

     } 
     else 
     { 
      if self.vcType.lowercased() == newRoom.category 
      { 
       self.rooms.append(newRoom) 

       self.rooms.sort(by: { 
        if $0.created_Date == nil 
        { 
         return false 
        } 
        if $1.created_Date == nil 
        { 
         return true 
        } 

        return $0.created_Date.compare($1.created_Date) == ComparisonResult.orderedDescending 
       }) 

       self.tableView.reloadData() 

      } 
     } 
    } 

} 

override func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    if (indexPath as NSIndexPath).row == 0 { 
     let cell2 = tableView.dequeueReusableCell(withIdentifier: "featured", for: indexPath) as! featuredCell 
     let room = rooms[(indexPath as NSIndexPath).row] 
     cell2.configureCell(room) 
     self.tableView.reloadData() 
     return cell2 

    } else { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ArticlesCell 
     let room = rooms[(indexPath as NSIndexPath).row] 
     cell.configureCell(room) 
     self.tableView.reloadData() 
     return cell 

    } 
} 
} 

ArticleManager:

import UIKit 

class ArticlesManager: NSObject { 

static let sharedClient = ArticlesManager() 

var dateFormater:DateFormatter{ 
    let df = DateFormatter() 
    df.dateFormat = "yyyy-MM-dd HH:mm:ss a z" 
    return df 
} 

var roomsitems = ["Home", "News", "Features", "Opinion", "Sports", "Entertainment", "Editor"] 

var rooms = [Room]() 
var catRooms = [String:[Room]]() 

var blockValueChangeInRoomArray:((Room) ->())! 

func fetchData() 
{ 
    Data.dataService.fetchData { 
     (room) in 

     self.rooms.append(room) 

     self.rooms.sort(by: { 
      if $0.created_Date == nil 
      { 
       return false 
      } 
      if $1.created_Date == nil 
      { 
       return true 
      } 

      return $0.created_Date.compare($1.created_Date) == ComparisonResult.orderedDescending 
     }) 

     if let obj = self.catRooms[room.category] //as? [Room] 
     { 
      var objRooms = obj 
      objRooms.append(room) 

      objRooms.sort(by: { 
       if $0.created_Date == nil 
       { 
        return false 
       } 
       if $1.created_Date == nil 
       { 
        return true 
       } 

       return $0.created_Date.compare($1.created_Date) == ComparisonResult.orderedDescending }) 

      self.catRooms[room.category] = objRooms 
     } 
     else 
     { 
      self.catRooms[room.category] = [room] 
     } 

     if self.blockValueChangeInRoomArray != nil 
     { 
      self.blockValueChangeInRoomArray(room) 
     } 
    } 
} 

} 

のDataService:

import UIKit 

class ArticlesManager: NSObject { 

static let sharedClient = ArticlesManager() 

var dateFormater:DateFormatter{ 
    let df = DateFormatter() 
    df.dateFormat = "yyyy-MM-dd HH:mm:ss a z" 
    return df 
} 

var roomsitems = ["Home", "News", "Features", "Opinion", "Sports", "Entertainment", "Editor"] 

var rooms = [Room]() 
var catRooms = [String:[Room]]() 

var blockValueChangeInRoomArray:((Room) ->())! 

func fetchData() 
{ 
    Data.dataService.fetchData { 
     (room) in 

     self.rooms.append(room) 

     self.rooms.sort(by: { 
      if $0.created_Date == nil 
      { 
       return false 
      } 
      if $1.created_Date == nil 
      { 
       return true 
      } 

      return $0.created_Date.compare($1.created_Date) == ComparisonResult.orderedDescending 
     }) 

     if let obj = self.catRooms[room.category] //as? [Room] 
     { 
      var objRooms = obj 
      objRooms.append(room) 

      objRooms.sort(by: { 
       if $0.created_Date == nil 
       { 
        return false 
       } 
       if $1.created_Date == nil 
       { 
        return true 
       } 

       return $0.created_Date.compare($1.created_Date) == ComparisonResult.orderedDescending }) 

      self.catRooms[room.category] = objRooms 
     } 
     else 
     { 
      self.catRooms[room.category] = [room] 
     } 

     if self.blockValueChangeInRoomArray != nil 
     { 
      self.blockValueChangeInRoomArray(room) 
     } 
    } 
} 

} 
+1

'reloadData'または' cellForRowAt'メソッドの中の他のテーブル更新メソッドを決して呼び出さないでください。悪い、悪い、悪い。それらの呼び出しを取り出し、何が起こるかを見てください。 – rmaddy

+1

無関係ですが、なぜ 'NSIndexPath'のすべての用途ですか? 'IndexPath'を使用してください。 – rmaddy

答えて

0

私は特定の問題を把握することができました。私がfirebaseを使っているので、誰が "読む"ことができるかに関するルールは、デフォルトでは、認証されたユーザに設定されていました。これを変更するには、firebaseコンソールに入って、パブリックに変更するか、ユーザを認証してからテーブルビューをロードする必要があります。いずれにしても、これがあなたを助けてくれることを願っています!

3

このリチウムを削除しますcellForRowAt indexPath方法からコードのNE:これは、configureCell表示データにチャンスを与えることなく連続的に表をリロードさ

self.tableView.reloadData() 

関連する問題