【问题标题】:TableView populating rows, but not contentTableView 填充行,但不填充内容
【发布时间】:2017-04-12 23:46:24
【问题描述】:

我目前有一个 tableView,它正在填充来自 firebase 数据库的内容。我能够打印出要填充到单元格中的特定信息,并且单元格物理上正在填充,通过滚动填充数据的适当长度的能力来指示。我不确定为什么它会访问信息并填充单元格,但不将数据插入单元格?

表格视图:

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

}

数据服务:

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

}

【问题讨论】:

  • 永远不要调用reloadDatacellForRowAt 方法中的任何其他表更新方法。糟糕,糟糕,糟糕。把这些电话拿出来看看会发生什么。
  • 不相关,但为什么要使用NSIndexPath?只需使用IndexPath

标签: ios swift uitableview tableview ios10


【解决方案1】:

cellForRowAt indexPath方法中去掉这行代码:

self.tableView.reloadData()

这是在不断地重新加载表格,而没有机会configureCell显示数据

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 2012-08-30
      • 2014-10-08
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多