Firebase Swift 3 使用 NSURLSession 将配置文件图像加载到 TableView
Posted
技术标签:
【中文标题】Firebase Swift 3 使用 NSURLSession 将配置文件图像加载到 TableView【英文标题】:Firebase Swift 3 Loading Profile Images Into TableView with NSURLSession 【发布时间】:2017-01-18 13:01:01 【问题描述】:我正在按照教程加载图像 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
但是每次我运行它时,我都会得到一个 nil 的数据,并且它永远不会附加到我的数组中。有人可以解释我错过了什么吗?这是我第一次尝试使用 Firebase。
【问题讨论】:
为什么要向 nsarray 添加数据,这是不好的做法 @kirtimali 你有什么建议? 查看***.com/questions/24231680/… 【参考方案1】:我实际上发现了问题所在,我不想只是删除帖子,以防其他人可能正在寻找相同问题的解决方案。事实证明,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
)
【讨论】:
以上是关于Firebase Swift 3 使用 NSURLSession 将配置文件图像加载到 TableView的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xcode 6.1 的 Swift 中使用 NSURL?
尝试使用 Photos Framework [Swift 2.0] 从 imagepickercontroller 检索 NSURL