Dans mon projet Firebase j'essaie d'appliquer Model View Controller pattern, donc j'ai séparé le contrôleur et la classe qui gère les requêtes firebase. je reçois cette exceptioniOS Populate Table View avec des données Firebase utilisant MVC Pattern
exception 'NSInvalidArgumentException', raison: « - [__ longueur NSCFNumber]: sélecteur non reconnu envoyé à l'instance
Je suis en train d'obtenir des éléments d'information de la base de données. Voici le modèle
class NewsItem: NSObject{
var title: String?
var detail: String?
var photoUrl: String?
var timestamp: String?
}
Voici la classe gestionnaire 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)
}
}
}
}
}
Je peux obtenir les valeurs de l'enfant imprimé bien, mais le problème est quand je l'appelle la méthode délégué du protocole.
Voici quelques portions de la vue table de classe contrôleur où j'adopte le protocole NewsController
:
FirebaseHandler.Instance.newsControllerDelegate = self
FirebaseHandler.Instance.fetchNews()
Ensuite, je mets en œuvre la méthode:
func fetchedNews(_ newsItem: NewsItem) {
print("Item:\n\n\n\(newsItem)\n\n\n")
self.newsItems.append(newsItem)
self.tableView.reloadData()
}
Le NewsItem n'est pas imprimé depuis l'erreur se produit avant que cette méthode est appelée, je suppose. Toutes les suggestions sont appréciées.
C'était exactement cela :) Merci d'avoir apprécié votre aide. – fullMoon