我很难找到如何获取更新facebookProfileUrl
,以便我可以在单元格的imageview中放置图像。正如您在代码中看到的那样,我在页面顶部创建了一个var facebookProfileUrl实例。在代码的底部,你可以看到,如果facebookProfileUrl为空,它会这么说 - 这就是这段代码的作用。即使我在代码中间更改facebookProfileUrl,也没有任何反应。我该怎么做才能解决这个问题?
var facebookProfileUrl = "" // THIS IS BEFORE viewDidLoad
@IBAction func addToFeed(sender: AnyObject) {
let accessToken = FBSDKAccessToken.currentAccessToken()
if(accessToken != nil) //should be != nil
{
let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
if(error == nil)
{
let userId: String? = result.valueForKey("id") as? String
let userID = userId
self.facebookProfileUrl = "http://graph.facebook.com/\(userID)/picture?type=large" // HERE I AM CHANGING THE VARIABLE
let feed = Sweet(content: feedContent, addedByUser: name!, profilePhoto: self.facebookProfileUrl)
let feedRef = self.dbRef.child(feedContent.lowercaseString)
feedRef.setValue(feed.toAnyObject())
}
else
{
print("error \(error)")
}
})
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:updateTableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! updateTableViewCell
let update = updates[indexPath.row]
cell.nameLabel.text = update.addedByUser
cell.updateLabel.text = update.content
if (facebookProfileUrl != "") {
if let url = NSURL(string: facebookProfileUrl) {
if let data = NSData(contentsOfURL: url) {
cell.picView.image = UIImage(data: data)
}
}
} else {
print("Empty facebookProfileUrl") // THIS ONE IS PRINTED
}
return cell
}
答案 0 :(得分:0)
您应该在完成块中调用self.tableView.reloadData()
(我建议将其作为if error == nil条件中的最后一行)
如上所述,这是一个异步调用,这意味着在服务器响应之后将调用该块req.startWithCompletionHandler({ ... })
中的代码。到目前为止,tableView可能已经加载了它的数据(换句话说,已经为当前屏幕上的所有单元调用了cellForRowAtIndexPath)。
虽然小心!我不确定你要完成的是什么,我还没有看到你的所有代码,但是你这样做的方式,所有的单元格都会有相同的url。如果没有更多信息,建议更好的方法来做这件事很难,但要注意。