override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!, object: PFObject!) -> PFTableViewCell! {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
cell.hitText.text = object.valueForKey("text") as! String
cell.hitText.numberOfLines = 0
let score = object.valueForKey("count") as! Int
cell.count.text = "\(score)"
var dateUpdated = object.createdAt as NSDate
var dateFormat = NSDateFormatter()
dateFormat.dateFormat = "h:mm a"
cell.time.text = (NSString(format: "%@", dateFormat.stringFromDate(dateUpdated)) as String) as String
let replycnt = object.objectForKey("replies") as! Int
if cell.count.text! == "\(-10)"
{
object.deleteInBackground()
}
return cell
}
我的代码工作得非常好,但截至昨晚它已停止工作。它现在没有删除任何东西,我什么都没改变。还有其他选择吗?
编辑。
其工作方式如下。由于cell.count.text等于-10,因此刷新一个项目后,应删除该对象。这适用于所有实例,当count为-10时,就像有-10票一样。
我试图将其更改为
deleteEventually()
delete()
然而,那些也不起作用。这似乎是一个异常,正如我所提到的,这段代码以前完美地工作。
修改
似乎零星更改的原因部分是由于解析服务器的速度。
答案 0 :(得分:2)
我更感到惊讶的是,代码一旦工作,我感到惊讶它现在不起作用。
每次在表视图中显示一行时, cellForRowAtIndexPath
都会运行。这是检查删除条件的地方,而不是执行删除。想象一下,用户来回滚动......你将一遍又一遍地检查每个对象的删除条件,可能会在配置视图时将其删除。
每当object.valueForKey("count")
发生变化时, 检查条件的时间都不在此方法之内。当您检测到删除条件时,删除该对象并调用loadObjects,它再次获取数据(现在没有删除的对象)并重新加载表...
看起来像这样:
// an object's "count" property just changed, if it is <= -10 delete it
object.deleteInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
if (success) {
self.loadObjects();
} else {
// handle error
}
}
// also remove the cell.count.text condition and the delete from the posted code
答案 1 :(得分:0)
我同意danh,tableViews实际上&#34;重用&#34;可能导致不可预测行为的单元格,因此最好尽可能多地保留表格数据源之外的逻辑。