知道为啥这个函数正在写入/更新表中的第一个单元格而不是 PFQueryTableViewController 中选定的单元格吗?

Posted

技术标签:

【中文标题】知道为啥这个函数正在写入/更新表中的第一个单元格而不是 PFQueryTableViewController 中选定的单元格吗?【英文标题】:Any idea why this func is writing/updating the first cell in table and not the selected one in PFQueryTableViewController?知道为什么这个函数正在写入/更新表中的第一个单元格而不是 PFQueryTableViewController 中选定的单元格吗? 【发布时间】:2015-12-10 16:27:30 【问题描述】:

在我的应用中,用户可以发布到 Parse 后端,他们的帖子会显示在时间线中 (PFQueryTableViewController)。此表格视图中的每个单元格都有一个按钮,用户可以按下该按钮来“喜欢”帖子。直到昨天我还有喜欢排序的功能,但今天突然它不再工作了。

现在,当用户喜欢帖子时,它会做很多事情:将用户的 objectId 添加到帖子 PFObject("likedBy") 中的数组中,并将帖子 PFObject 添加到 User 类中的关系中(“喜欢的帖子”)。

但现在似乎正在发生的事情是它可以工作,但存在以下问题:

它通常会喜欢表格视图顶部的任何帖子/单元格,而不是用户实际点击的那个——例如点击表格中第 4 个帖子上的点赞按钮,它会改为喜欢第 1 个帖子 它可能喜欢预期的帖子,但之后用户无法喜欢其他任何内容 或者它可能根本不喜欢任何东西

这是我正在使用的代码,我哪里出错了?昨天运行良好,我认为这不是 Parse 后端问题,因为我在一小时前将应用设置为使用全新的后端,但问题仍然存在。

func likePost(sender: UIButton) 

        let hitPoint = sender.convertPoint(CGPointZero, toView:  self.tableView)
        let hitIndex = tableView.indexPathForRowAtPoint(hitPoint)
        let object = objectAtIndexPath(hitIndex)

        let userId = PFUser.currentUser()?.objectId

        let relayedResponses = (PFUser.currentUser()?.relationForKey("likedPosts"))! as PFRelation
        likedPosts.addObject(object!)
        PFUser.currentUser()?.saveInBackground()

        object?.addUniqueObject(userId!, forKey: "likedBy")
        object?.saveInBackground()

        self.tableView.reloadData()


在我的cellForRowAtIndexPath 我有:

cell.likeButton.tag = indexPath.row
    cell.likeButton.addTarget(self, action: "likePost:", forControlEvents: UIControlEvents.TouchUpInside)

我会很感激任何帮助,因为这让我发疯了!!我就是看不出问题出在哪里!

【问题讨论】:

【参考方案1】:

您将CGPointZero 转换为tableView。它实际上是CGPoint(0,0),并且总是返回0,0,这是表格视图的第一行。

【讨论】:

谢谢!你知道我将如何确定它只喜欢我点击的帖子/行而不是第一行吗? 使用按钮的taglet index = sender.tag 然后let object = objectAtIndexPath(index) 啊,这现在更有意义了...但是现在我在 objectAtIndexPath(index) 行中有一个错误,说“无法将 'Int' 类型的值转换为预期的参数类型 'NSIndexPath?' 所以改成那个。 let index = NSIndexPath(forItem: sender.tag, inSection: 0) 完美!奇怪的是,我尝试了之前的代码并且它再次工作,但我现在选择了你的修订,因为我知道它们确实有效,我现在明白它们为什么有效。谢谢!

以上是关于知道为啥这个函数正在写入/更新表中的第一个单元格而不是 PFQueryTableViewController 中选定的单元格吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将单元格而不是单元格的值传递给 LibreOffice 函数?

如何在 TAP 上编辑 tableview 单元格而不是滑动 - Swift

ASP.NET MVC AspNetUserClaims 如何读取、写入和更新表中的数据?

将HTML写入字符串,组合字母和字符串

如何更新配置单元表中的值?

在 Excel 中合并单元格而不丢失数据