我正在創建一個健身應用,你可以收藏教練賬戶,當你收藏一個教練賬戶時,我想將該教練發布的所有鍛煉添加到當前用戶的飼料中。
當你收藏一個教練賬戶時,我使用這個功能將鍛煉添加到Firestore的一個集合中:
func addToUserFeed() {
guard let trainerUid = trainer.id else { return }
guard let currentUid = AuthViewModel. shared.userSession?.uid else { return }。
COLLECTION_WORKOUTS.whereField("ownerUid", isEqualTo: trainerUid).addSnapshotListener { snapshot, _ in
guard let workoutIDs = snapshot? .document.map({ $0.documentID }) else { return }
workoutIDs.forEach { id in }
COLLECTION_USERS.document(currentUid).collection("user-feed").document(id).setData([:] )
}
}
類似地,當你不喜歡一個訓練者時,我正在用這個函式從用戶feed集合中洗掉這些訓練:
func removeFromUserFeed() {
guard let trainerUid = trainer.id else { return }
guard let currentUid = AuthViewModel. shared.userSession?.uid else { return }。
COLLECTION_WORKOUTS.whereField("ownerUid", isEqualTo: trainerUid).addSnapshotListener { snapshot, _ in
guard let workoutIDs = snapshot? .document.map({ $0.documentID }) else { return }
workoutIDs.forEach { id in }
COLLECTION_USERS.document(currentUid).collection("user-feed") .document(id).delete()
}
}
然后為了在我的應用程式中的feed頁面視圖上顯示這些鍛煉,我用這個函式在firestore的user-feed集合中獲取所有的鍛煉:
。/FETCH WORKOUTS SAVED BY THE USER
func fetchFavoriteWorkouts() {
guard let currentUid = AuthViewModel. shared.userSession?.uid else { return }。
COLLECTION_USERS.document(currentUid).collection("user-feed").addSnapshotListener { snapshot, _ in
guard let workoutIDs = snapshot? .document.map({ $0.documentID }) else { return }
//This may cause an unNECCESSARY AMOUNT OF WRITES TO THE APP
self.workouts.removeAll()
workoutIDs.forEach { id in.
COLLECTION_WORKOUTS.document(id).addSnapshotListener { snapshot, _ in
guard let workout = try? snapshot?.data(as: Workout.self) else { return }
self.workouts.append(workout)
print("(workoutIDs)")
}
}
}
這就是用戶反饋的firestore集合的樣子。它將鍛煉的ID檔案添加到集合中,這些檔案與你剛剛收藏的訓練師發布的鍛煉相匹配:
從某種意義上說,這是在正常作業,當你收藏一個教練賬戶時,它正確地將多個檔案添加到用戶反饋集合中,這些檔案與你剛剛收藏的教練發布的鍛煉ID相對應,然而,當你收藏一個教練賬戶時,應用程式只是關閉(不是真的崩潰),然后當你重新打開應用程式時,用戶反饋正確顯示你收藏的教練的鍛煉。
在我的代碼中,是否有任何東西可能導致在你收藏一個訓練師時隨機關閉應用程式?
我知道這段代碼可能不是最有效的,但我現在真的不專注于解決這個問題,只是想解決隨機關閉應用程式的問題。
編輯: 崩潰只發生在我最喜歡的有多個鍛煉專案的訓練者身上。所以我猜想,當我在一個集合中同時添加多個檔案時,會有什么東西導致崩潰?因為如果我收藏了一個只有一個鍛煉專案的教練,那么它就會把這個鍛煉專案添加到我的資料中,而不會發生崩潰。
uj5u.com熱心網友回復:
這個問題是由于每次鍛煉被添加到鍛煉串列中時,監聽器都會被呼叫,并向串列中添加重復的值。
將addSnapshotListener改為getDocuments fetchFavoriteWorkouts() 并在feed View中的.onAppear()內呼叫這個獲取函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324724.html
標籤:
