2014-10-17 194 views
0

奇怪行爲我的代碼與核心數據實體

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    let itemID:NSManagedObjectID = self.frc!.objectAtIndexPath(indexPath).objectID! 
    let entity:Entity = self.frc?.managedObjectContext.existingObjectWithID(itemID, error: nil) as Entity 

    if entity.completed { 
     entity.completed = false 
    } else { 
     entity.completed = true 
    } 

    println(entity.completed) 

} 

該部分在事件發生時的tableView執行滾動至頂部動畫任何想法?

+0

問題是這行代碼'entity.completed = false' – sger 2014-10-17 14:29:06

回答

1

您可能以某種方式更新您的託管對象數組(未顯示),可能是通過某種委託方法。很可能,您在某處調用tableView.reloadData()來更新顯示的數據。這會自動重新加載整個表格視圖並滾動到頂部。

相反,只需更新tableView.reloadRowsAtIndexPaths(rowAnimation:)所記錄的單元here即可。

也許你排序的例程(未顯示)是由completed屬性排序。然後滾動可能是預期的行爲。

注意:您將ID數組保存爲dataSource似乎很奇怪。由於核心數據的錯誤行爲,僅擁有一組對象將會同樣高效。更好的是,您應該使用帶有表格視圖的NSFetchedResultsController - 您可以免費獲得許多酷炫的行爲,並且可以確保爲性能和內存管理提供最佳解決方案。

+0

我認爲它是一個iOS 8的錯誤它發生在我使用自行調整大小的單元格的高度爲行時,一切正常 – sger 2014-10-17 15:49:21

+0

@Mundi:'tableView .updateCellsForRowsAtIndexPaths()'聽起來很有趣,但我找不到那個函數? – zisoft 2014-10-17 17:23:55

+1

對不起,應該是'reload'。更正並鏈接到文檔。 – Mundi 2014-10-18 08:18:15