【问题标题】:iOS Populate Table View With Firebase Data Using MVC PatterniOS 使用 MVC 模式使用 Firebase 数据填充表视图
【发布时间】:2017-06-10 15:49:50
【问题描述】:

在我的 Firebase 项目中,我尝试应用 Model View Controller 模式,因此我将控制器和处理 firebase 请求的类分开。 我得到了这个例外

异常'NSInvalidArgumentException',原因:'-[__NSCFNumber 长度]:发送到实例的选择器无法识别

我正在尝试从数据库中获取新闻项目。这是模型

class NewsItem: NSObject{
    var title: String?
    var detail: String?
    var photoUrl: String?
    var timestamp: String?
}

这是 firebase 处理程序类

protocol NewsController: class {
    func fetchedNews(_ newsItem: NewsItem)
}

class FirebaseHandler {

    private static let _instance = FirebaseHandler()

    static var Instance: FirebaseHandler{
        return _instance
    }

    weak var newsControllerDelegate: NewsController?

    func fetchNews() {
        References.Instance.newsRef.observe(.childAdded) { 
            (snapshot: DataSnapshot) in
            if let child = snapshot.value as? [String: AnyObject]{
                let newsItem = NewsItem()
                print("CHILD: \n\n\n\n\(child)\n\n\n")
                newsItem.setValuesForKeys(child)
                DispatchQueue.main.async {
                    self.newsControllerDelegate?.fetchedNews(newsItem)
                }
            }
        }
    }
}

我可以很好地打印子值,但问题是当我调用协议委托方法时。

以下是我采用NewsController 协议的表格视图控制器类的一些部分:

FirebaseHandler.Instance.newsControllerDelegate = self
FirebaseHandler.Instance.fetchNews()

然后我实现方法:

func fetchedNews(_ newsItem: NewsItem) {
    print("Item:\n\n\n\(newsItem)\n\n\n")
    self.newsItems.append(newsItem)
    self.tableView.reloadData()
}

newsItem 没有打印,因为我猜是在调用此方法之前发生错误。任何建议表示赞赏。

【问题讨论】:

    标签: swift uitableview firebase firebase-realtime-database key-value-coding


    【解决方案1】:

    根据报告的NSNumber 相关错误,我猜您的timestamp 属性实际上存储为Firebase 中的整数(而不是字符串)。如果是这种情况,请尝试将其更改为:

    var timestamp: Int = 0
    

    要了解为什么我们不能使用上面的Int?(甚至Int!),请同时see this answer。

    另外:您的观察者代码中不需要 DispatchQueue.main.async 包装器。 Firebase 在主线程上调用了所有数据库回调已经 ;)

    【讨论】:

    • 就是这样 :) 感谢您的帮助。
    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多