【发布时间】:2016-05-10 09:38:38
【问题描述】:
我喜欢一个带有新闻源的社交应用。如果您从新闻源中的帖子中单击用户名,您将转到他的个人资料。现在我无法从该特定单元格/帖子中检索数据到另一个视图控制器。 所以我必须显示用户的个人资料,他的用户名等,但这不起作用?
我有一个 Post 模型:
class Post {
private var _postDescription: String!
private var _profileImageURL: String?
private var _likes: Int!
private var _username: String!
private var _postKey: String!
private var _timeStamp: String!
private var _postRef: Firebase!
var postDescription: String? {
return _postDescription
}
var likes: Int {
return _likes
}
var username: String {
return _username
}
var postKey: String {
return _postKey
}
var profileImageURL: String? {
return _profileImageURL
}
init(description: String, username: String, profileImageURL: String?) {
self._postDescription = description
self._username = username
self._profileImageURL = profileImageURL
}
init(postKey: String, dictionary: Dictionary<String, AnyObject>) {
self._postKey = postKey
if let likes = dictionary["likes"] as? Int {
self._likes = likes
}
if let desc = dictionary ["description"] as? String {
self._postDescription = desc
}
if let imgUrl = dictionary["profileImg"] as? String {
self._profileImageURL = imgUrl
}
if let user = dictionary ["username"] as? String {
self._username = user
} else {
self._username = ""
}
self._postRef = DataService.ds.REF_POST.childByAppendingPath(self._postKey)
}
}
这是我的个人资料VC:
class ProfileVC: UIViewController {
@IBOutlet weak var username: UILabel!
var post: Post?
override func viewDidLoad() {
super.viewDidLoad()
username.text = post.username // gives me a nil error.
}
}
我在 tableViewCell 中使用 TapGestureRecognizer 来执行 segue。 在我的 cellForRowAtIndexPath 中:
let profileLblTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(NewsVC.goToProfileScreen(_:)))
profileLblTapRecognizer.numberOfTapsRequired = 1
profileLblTapRecognizer.delegate = self
cell.usernameLabel.tag = indexPath.row
cell.usernameLabel.userInteractionEnabled = true
cell.usernameLabel.addGestureRecognizer(profileLblTapRecognizer)
还有 goToProfileScreen 函数:
func goToProfileScreen(gesture: UITapGestureRecognizer) {
self.performSegueWithIdentifier("ProfileScreen", sender: self)
}
更新:
我尝试了这个:
let profileLblTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(NewsVC.prepareForSegue(_:sender:)))
使用此功能:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ProfileScreen" {
if let cell = sender as? NewsCell, row = tableView.indexPathForCell(cell)?.row, vc = segue.destinationViewController as? ProfileVC {
vc.post = posts[row]
}
}
}
但这给了我一个关于 appDelegate 的错误:线程 1: EXC_BAD_ACCESS(code=1, address = 0x1)
【问题讨论】:
-
如何将数据传递给视图控制器。你在用
prepareForSegue吗? -
我更新了我的代码 :) 它尝试将 prepareForSeque 与destinationController 一起使用,但这也给了我一个错误..
标签: ios swift firebase label tableview