Swift 1.2闭包优化错误

时间:2015-04-16 10:05:50

标签: swift release-mode

我有一个对象数组,都有一个timeStamp(NSDate),我试图用下面的闭包对它们进行排序。

问题是这样做没有任何优化,所以使用调试版本一切都很好,花花公子。但是在优化的过程中,我得到了以下EXC_BAD_ACCESS。

The closure simply won't work with optimisation..

        reportCells.sort({ (a: UITableViewCell, b: UITableViewCell) -> Bool in
        if let first = a as? GreenelyTableViewCell,
            second = b as? GreenelyTableViewCell {
                if let firstDate = first.timeStamp,
                    secondDate = second.timeStamp {
                        let comparison = firstDate.compare(secondDate)
                        if comparison == NSComparisonResult.OrderedAscending {
                            return false
                        } else {
                            return true
                        }
                }
        }
        return false
    })

有任何解决方法吗?

1 个答案:

答案 0 :(得分:0)

问题是你正在整理细胞。首先,这不是一个正确的方法。您应该对数据源数组进行排序。因为table正在内存中管理其单元格,并且当您创建单元格数组时。即使看起来有效,它也会在后端引起问题。现在来解决你的问题,

您正在排序单元格,当您返回到tableview列表方法时,它再次从数据源中获取数据,即我的意思是您的对象数组。而tableview没有找到合适的数据安排。我的意思是你的单元格在排序后是1,4,2,3顺序,而你的数据是1,2,3,4顺序。这将导致表视图抛出异常。此外,细胞的可恢复性也会引起问题。 因此,您需要在将数据显示到单元格之前对其进行排序。我打赌你的问题会得到解决。