解析deleteInBackground停止工作

时间:2015-08-03 15:28:18

标签: ios swift parse-platform

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为-1​​0时,就像有-10票一样。

我试图将其更改为

deleteEventually()  
delete() 
然而,那些也不起作用。这似乎是一个异常,正如我所提到的,这段代码以前完美地工作。

修改

似乎零星更改的原因部分是由于解析服务器的速度。

2 个答案:

答案 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;可能导致不可预测行为的单元格,因此最好尽可能多地保留表格数据源之外的逻辑。