2016-11-29 49 views
0

我有一个tableView目前正在填充firebase数据库的内容。我能够打印出要填充到单元格中的特定信息,并且物理上正在填充单元格,这表示可以滚动适当长度的填充数据。我不确定为什么它会访问信息并填充单元格,但不能将数据插入单元格中?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

不要在'cellForRowAt'方法内调用'reloadData'或任何其他表更新方法。坏,坏,坏。把这些电话拿出来看看会发生什么。 – rmaddy

+1

无关,但为什么'NSIndexPath'的所有用途?只需使用'IndexPath'。 – rmaddy

回答

0

我已经能够找出我遇到的特定问题。在我使用Firebase时,有关谁可以“读取”的规则默认情况下设置为已通过身份验证的用户。为了改变这种情况,您必须进入Firebase控制台,并在加载表格视图之前将其更改为public或对用户进行身份验证。无论哪种方式,我希望这能够帮助你!

3

删除此礼从cellForRowAt indexPath方法的代码NE:

self.tableView.reloadData() 

此连续重新加载表没有给它机会来configureCell显示数据