[英]Firebase Swift 3 Loading Profile Images Into TableView with NSURLSession
我正在遵循一個教程來加載圖像URL,並將其附加到數組中,以使用以下代碼塊在每個用戶的單元格的UITableView中顯示用戶配置文件圖像:
let url = NSURL(string: urlString)
NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) in
//download hit an error so lets return out
if error != nil {
print(error)
return
}
dispatch_async(dispatch_get_main_queue(), {
//"profilePics" is my array of UIImages made as a global var
self.profileImages.append(UIImage[data!])
})
}).resume()
但是由於某些原因,“ NSURLSession”在我編程時沒有顯示為建議,並且返回錯誤,因此我將所有內容從“ NSURL ...”更改為簡單的“ URL ...”:
//Grabbing images from db
print("starting get image block : ")
let url = URL(string: profileImageURL)
URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in
print("grabbing image: ") //Test line for monitor
print(String(describing: data)) //Test line for monitor : returns "nil"
if error != nil{
print(error!)
return
}
DispatchQueue.main.async {
//"profilePics" is my array of UIImages made as a global var
self.profilePics.append(UIImage(data: data!))
print("Image appended")
}
}).resume()
// grabbing images from db end
但是每次運行此命令時,我得到的數據都是零,並且永遠不會附加到數組中。 有人可以解釋我所缺少的嗎? 這是我第一次嘗試使用Firebase。
我實際上發現了問題所在,並且如果有人可能正在尋找解決同一問題的方法,我不想刪除帖子。 事實證明,URLSession可以正常工作,因此找不到“ NSURLSession”不是問題。 但是,一旦我知道該配置文件圖像將在重新加載uitableview后才加載。 一旦我移動了tableview.reload(),它就會一直工作,這是Swift 3的工作代碼:
//This method grabs all user data for each user & adds them to an
//array to be displayed in a uitableview
func getUsersData(){
FIRDatabase.database().reference().child("users").observe(.childAdded, with: {(snapshot) in
if let dictionary = snapshot.value as? [String:AnyObject]{
print(snapshot.childrenCount)
if (snapshot.childrenCount > 2) {
self.users.append(dictionary["name"] as! String)
if !(dictionary["subjects"]?.isEqual(""))!{
self.subjects.append(dictionary["subjects"] as! String)
}
else{
self.subjects.append("N/A")
}
if !(dictionary["location"]?.isEqual(nil))!{
self.states.append(dictionary["location"] as! String)
}
else{
self.states.append("N/A")
}
self.ratings.append("4.1")
if let profileImageURL = dictionary["userPhoto"] {
let url = URL(string: profileImageURL as! String)
URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in
if error != nil{
print(error!)
return
}
DispatchQueue.main.async {
self.profilePics.append(UIImage(data: data!))
print("Image appended")
}
// This line is required to reload with new data in tableview array data from db
DispatchQueue.main.async{
self.browseUITableView.reloadData()
}
}).resume()
}
// grabbing images from db end
}
}
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.