Swift - 处理从 Firestore 获取返回的数据
Swift - Working with data returned from Firestore fetching
我有一个名为 FavoriteArticle
的 CoreData 对象。我将它存储在 Firestore 中,作为我拥有的每个用户的对象集合。
这是我的核心数据:
my CoreData entity of FavoriteArticle
这是我的 Firestore:
my Firestore hierarchy
当我尝试获取 currentUser 的 savedArticles 时,我遇到了一个我不知道如何解决的问题:
returns 是 [String:Any]
类型的数据,而我需要它是 [String:FavoriteArticle]
才能将其传递给 completionHandler
并稍后在我的应用程序中使用它.我无法使用 Firebase 的自定义对象代码,因为 CoreData 不符合 Codable
.
这是我目前糟糕的解决方法尝试,但我的应用程序一直在 favoriteArticle.title = "\(document.data()["title"])"
线上崩溃,并出现错误 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FavoriteArticle setTitle:]: unrecognized selector sent to instance 0x6000022ca840'
-
func fetchUserDataCollection(uid: String, completionHandler: @escaping(String?,[String : FavoriteArticle]?) -> ()) {
let docRef = database.collection("Users").document(uid).collection("savedArticles")
docRef.getDocuments { (querySnapshot, error) in
if let error = error {
completionHandler("Error getting documents: \(error)",nil)
} else {
var resultsDictionary: [String: FavoriteArticle] = [:]
for document in querySnapshot!.documents {
let favoriteArticle = FavoriteArticle()
print(document.data()["title"] as! String)
favoriteArticle.title = "\(document.data()["title"])"
favoriteArticle.isFavorite = (document.data()["isFavorite"] as? Bool)!
favoriteArticle.author = document.data()["author"] as! String
favoriteArticle.topic = document.data()["topic"] as! String
favoriteArticle.imageUrl = document.data()["imageUrl"] as! String
favoriteArticle.content = document.data()["content"] as! String
favoriteArticle.url = document.data()["url"] as! String
favoriteArticle.date = document.data()["date"] as! String
resultsDictionary[document.documentID] = favoriteArticle
}
completionHandler(nil,resultsDictionary)
}
}
}
我该如何解决这个问题?
问题出在 let favoriteArticle = FavoriteArticle()
行,因为我忘记在其中添加上下文。更改为:
let favoriteArticle = FavoriteArticle(context: (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext)
已解决问题
我有一个名为 FavoriteArticle
的 CoreData 对象。我将它存储在 Firestore 中,作为我拥有的每个用户的对象集合。
这是我的核心数据: my CoreData entity of FavoriteArticle
这是我的 Firestore: my Firestore hierarchy
当我尝试获取 currentUser 的 savedArticles 时,我遇到了一个我不知道如何解决的问题:
returns 是 [String:Any]
类型的数据,而我需要它是 [String:FavoriteArticle]
才能将其传递给 completionHandler
并稍后在我的应用程序中使用它.我无法使用 Firebase 的自定义对象代码,因为 CoreData 不符合 Codable
.
这是我目前糟糕的解决方法尝试,但我的应用程序一直在 favoriteArticle.title = "\(document.data()["title"])"
线上崩溃,并出现错误 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FavoriteArticle setTitle:]: unrecognized selector sent to instance 0x6000022ca840'
-
func fetchUserDataCollection(uid: String, completionHandler: @escaping(String?,[String : FavoriteArticle]?) -> ()) {
let docRef = database.collection("Users").document(uid).collection("savedArticles")
docRef.getDocuments { (querySnapshot, error) in
if let error = error {
completionHandler("Error getting documents: \(error)",nil)
} else {
var resultsDictionary: [String: FavoriteArticle] = [:]
for document in querySnapshot!.documents {
let favoriteArticle = FavoriteArticle()
print(document.data()["title"] as! String)
favoriteArticle.title = "\(document.data()["title"])"
favoriteArticle.isFavorite = (document.data()["isFavorite"] as? Bool)!
favoriteArticle.author = document.data()["author"] as! String
favoriteArticle.topic = document.data()["topic"] as! String
favoriteArticle.imageUrl = document.data()["imageUrl"] as! String
favoriteArticle.content = document.data()["content"] as! String
favoriteArticle.url = document.data()["url"] as! String
favoriteArticle.date = document.data()["date"] as! String
resultsDictionary[document.documentID] = favoriteArticle
}
completionHandler(nil,resultsDictionary)
}
}
}
我该如何解决这个问题?
问题出在 let favoriteArticle = FavoriteArticle()
行,因为我忘记在其中添加上下文。更改为:
let favoriteArticle = FavoriteArticle(context: (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext)
已解决问题