【发布时间】: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