如何防止更新的 Parse 对象移动到数组的前面?
How can I prevent updated Parse objects from moving to the front of my array?
对于上下文:
我有一个 UITableView,它显示 UITableViewCells 用户完成的绘图。此 tableview 提取存储在我的 Parse 帐户中的数据,并试图按时间倒序显示单元格,最近提交的绘图在顶部。
我在每个单元格上都有一个 "like" 按钮,用于将当前用户名添加到每个绘图对象的数组中。如果当前用户名存在于该数组中,则赞按钮已经着色,表明他们已经喜欢了该绘图。
但是,当用户 "likes" 绘图时,他们的名字使用 .addUniqueObject
添加到数组中,"updates" Parse 上的绘图对象,并以某种方式将其移动到阵前。因此,在 Feed 顶部显示旧图只是因为有人喜欢它。
我怎样才能避免这种情况?我想忽略这样一个事实,即在我的解析对象上将当前用户名添加到 whoLiked
数组会使应用程序认为它是最新的绘图。
我希望项目留在数组中并根据 time/date 提交的 在 Table 视图中排序图纸.
我的代码:
在HomeFeedTableViewController中,我在几个地方调用了loadData()
。这里是 loadData()
:
func loadData() {
timelineData.removeAllObjects()
var findHomeFeedData:PFQuery = PFQuery(className: "UserDrawing")
findHomeFeedData.findObjectsInBackgroundWithBlock({
(objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil{
for object in objects!{
let drawinn:PFObject = object as! PFObject
self.timelineData.addObject(drawinn)
}
// this reverseObjectEnumerator thing just displays in chronological order (reversed order)
let array:NSArray = self.timelineData.reverseObjectEnumerator().allObjects
self.timelineData = NSMutableArray(array: array)
self.tableView.reloadData()
}
})
}
timelineData
是 var timelineData: NSMutableArray = NSMutableArray()
每个自定义 UITableViewCell (DrawingTableViewCell) 都有一个 heartButtonPressed
IBAction:
@IBAction func heartButtonPressed(sender: UIButton) {
let timelineData = dataSource?.getTimelineData(self)
let indexPath = dataSource?.getIndexPath(self)
println("timelineData is: \(timelineData)")
println("indexPath is: \(indexPath)")
let drawinn: PFObject = timelineData!.objectAtIndex(sender.tag) as! PFObject
println("objectID is: \(drawinn.objectId)")
PFUser.currentUser()?.addUniqueObject(drawinn.objectId!, forKey: "liked")
PFUser.currentUser()?.saveInBackground()
let user = PFUser.currentUser()?.username
drawinn.addUniqueObject(user!, forKey: "whoLiked")
drawinn.saveInBackground()
if(parseObject != nil) {
if var votes:Int? = parseObject!.objectForKey("votes") as? Int {
votes!++
parseObject!.setObject(votes!, forKey: "votes")
parseObject!.saveInBackground()
likesLabel?.text = "\(votes!)"
self.heartButton.setImage(UIImage(named: "heart_button_filled"), forState: UIControlState.Normal)
}
}
heartImageView?.hidden = false
heartImageView?.alpha = 1.0
UIView.animateWithDuration(1.0, delay: 1.0, options:nil, animations: {
self.heartImageView?.alpha = 0
}, completion: {
(value:Bool) in
self.heartImageView?.hidden = true
})
}
如果有任何不清楚或需要进一步说明,请告诉我。谢谢!
我刚刚看到 Parse 向 PFQuery
提供 addAscendingOrder
和 addDescendingOrder
。所以为了解决我的问题,我在 loadData()
方法中添加了以下行:
findHomeFeedData.addAscendingOrder("createdAt")
对于上下文:
我有一个 UITableView,它显示 UITableViewCells 用户完成的绘图。此 tableview 提取存储在我的 Parse 帐户中的数据,并试图按时间倒序显示单元格,最近提交的绘图在顶部。
我在每个单元格上都有一个 "like" 按钮,用于将当前用户名添加到每个绘图对象的数组中。如果当前用户名存在于该数组中,则赞按钮已经着色,表明他们已经喜欢了该绘图。
但是,当用户 "likes" 绘图时,他们的名字使用 .addUniqueObject
添加到数组中,"updates" Parse 上的绘图对象,并以某种方式将其移动到阵前。因此,在 Feed 顶部显示旧图只是因为有人喜欢它。
我怎样才能避免这种情况?我想忽略这样一个事实,即在我的解析对象上将当前用户名添加到 whoLiked
数组会使应用程序认为它是最新的绘图。
我希望项目留在数组中并根据 time/date 提交的 在 Table 视图中排序图纸.
我的代码:
在HomeFeedTableViewController中,我在几个地方调用了loadData()
。这里是 loadData()
:
func loadData() {
timelineData.removeAllObjects()
var findHomeFeedData:PFQuery = PFQuery(className: "UserDrawing")
findHomeFeedData.findObjectsInBackgroundWithBlock({
(objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil{
for object in objects!{
let drawinn:PFObject = object as! PFObject
self.timelineData.addObject(drawinn)
}
// this reverseObjectEnumerator thing just displays in chronological order (reversed order)
let array:NSArray = self.timelineData.reverseObjectEnumerator().allObjects
self.timelineData = NSMutableArray(array: array)
self.tableView.reloadData()
}
})
}
timelineData
是 var timelineData: NSMutableArray = NSMutableArray()
每个自定义 UITableViewCell (DrawingTableViewCell) 都有一个 heartButtonPressed
IBAction:
@IBAction func heartButtonPressed(sender: UIButton) {
let timelineData = dataSource?.getTimelineData(self)
let indexPath = dataSource?.getIndexPath(self)
println("timelineData is: \(timelineData)")
println("indexPath is: \(indexPath)")
let drawinn: PFObject = timelineData!.objectAtIndex(sender.tag) as! PFObject
println("objectID is: \(drawinn.objectId)")
PFUser.currentUser()?.addUniqueObject(drawinn.objectId!, forKey: "liked")
PFUser.currentUser()?.saveInBackground()
let user = PFUser.currentUser()?.username
drawinn.addUniqueObject(user!, forKey: "whoLiked")
drawinn.saveInBackground()
if(parseObject != nil) {
if var votes:Int? = parseObject!.objectForKey("votes") as? Int {
votes!++
parseObject!.setObject(votes!, forKey: "votes")
parseObject!.saveInBackground()
likesLabel?.text = "\(votes!)"
self.heartButton.setImage(UIImage(named: "heart_button_filled"), forState: UIControlState.Normal)
}
}
heartImageView?.hidden = false
heartImageView?.alpha = 1.0
UIView.animateWithDuration(1.0, delay: 1.0, options:nil, animations: {
self.heartImageView?.alpha = 0
}, completion: {
(value:Bool) in
self.heartImageView?.hidden = true
})
}
如果有任何不清楚或需要进一步说明,请告诉我。谢谢!
我刚刚看到 Parse 向 PFQuery
提供 addAscendingOrder
和 addDescendingOrder
。所以为了解决我的问题,我在 loadData()
方法中添加了以下行:
findHomeFeedData.addAscendingOrder("createdAt")