現在、Firebaseデータベース内の「投稿」の数を取得しようとしていますが、なんらかの理由で1に等しい"postNumber"を呼び出すときに自身をリセットします。私はまた、後で使用するために配列にデータを保存したいので、データベースからまっすぐ読み込み、データをまったく格納しないで、配列にすべて保存しました。FirebaseDataSnapshotを文字列として配列に追加する(Swift 3)
のviewDidLoad()関数
var postNumber = 0
override func viewDidLoad() {
super.viewDidLoad()
updateFeed()
print("PostNumber in ViewDidLoad: \(self.postNumber)") //equals 0
collectionView?.backgroundColor = .white
}
updateFeed機能
func updateFeed(){
let uid = FIRAuth.auth()?.currentUser?.uid
let ref = FIRDatabase.database().reference(fromURL: "https://firebaseio.com/")
ref.child("users").child(uid!).child("Posts").observe(.value, with: { (snapshot) in
for item in snapshot.children{
let snapshotValue = snapshot.value as? NSDictionary
var snapString = String(describing: item)
var snapInt = Int(snapString)
self.postCollection.append(snapString)
let firstName = (snapshot.value as! NSDictionary)["First Person"] as? String
print("SnapShot: \(snapString)") //gives proper data
self.postNumber = self.postCollection.count
print("PostNumber: \(self.postNumber)") //equals 1
print("PostSource: \(self.postCollection)")
}
})
print("Number of Posts (After Adding): \(self.postCollection.count)") //equals 0
collectionView?.reloadData()
}
スナップショット自体を保存できませんでしたか?スナップショットは不変なので、データを失うことに問題はありません。なぜそれを文字列に変換する必要がありますか? –
関数の後に呼び出されたときに配列の長さを変更することはできません – Skiddswarmik