1
ログインしたユーザーのデータをFirebaseから取得しようとしています。ただし、observeSigleEventのメソッドの内部に入ってデータを取り込むことはないので、cellForRowAtIndexpathメソッドの場合、配列の戻り値はnilとなり、致命的なエラーが発生します。インデックスが範囲外です。Swift Firebase observeSingleEventのメソッドを呼び出さない
コードは以下のとおりです。
@IBOutlet var tableView: UITableView!
@IBOutlet var homeActivityIndicator: UIActivityIndicatorView!
var databaseRef = Database.database().reference()
var loggedInUser = Auth.auth().currentUser
var loggedInUserData : AnyObject?
var posts = [AnyObject?]()
override func viewDidLoad() {
super.viewDidLoad()
// get loggedinUser Details
self.databaseRef.child("user_profiles").child(self.loggedInUser!.uid).observeSingleEvent(of:.value, with: {
(snapshot) in
if(snapshot.exists()){
self.loggedInUserData = snapshot
// get all posts that are made by user
self.databaseRef.child("posts/\(self.loggedInUser!.uid)").observe(.childAdded, with:{ (snapshot2) in
if(snapshot2.exists()){
self.posts.append(snapshot2)
self.tableView.insertRows(at: [IndexPath (row: 0, section: 0)], with: UITableViewRowAnimation.automatic)
self.homeActivityIndicator.stopAnimating()
}else{return}
}){(error) in
print(error.localizedDescription)
}
}else{return}
})
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell : homeViewTableViewCell = tableView.dequeueReusableCell(withIdentifier: "HomeViewTableViewCell", for: indexPath) as! homeViewTableViewCell
let post = posts[(self.posts.count-1) - (indexPath).row]!.value(forKey: "text") as! String
cell.configure(profilePic: nil, name: self.loggedInUserData!.value(forKey: "name") as! String, handle: self.loggedInUserData!.value(forKey: "handle") as! String, post: post)
return cell
}
ありがとうございました!出来た。 –