我在学习Swift时正在构建博客阅读器。在此我将数据保存到Core Data,并可选择将文章标记为" read"。当我使用editActionsForRowsAtIndexPath将它们单独标记为读取时,tableview.reloadData()可以正常工作,单元格格式也会发生变化。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
但是,当我使用NSBatchUpdateRequest时,核心数据更新但单元格格式化不会更新。我必须强制退出应用程序并重新启动以使单元格正确显示。我在didChangeObject中添加了print(&#34; Updated&#34;)来验证它是不是导致问题的configureCell。
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
let object = fetchedResultsController.objectAtIndexPath(indexPath)
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
var edit = UITableViewRowAction()
if let read = object.valueForKey("read") as? Bool{
if read == true{
edit = UITableViewRowAction(style: .Normal, title: "Mark\nUnread") { action, index in
object.setValue(false, forKey: "read")
do{
try context.save()
}catch{
}
tableView.reloadData()
self.updateReadAll()
}
edit.backgroundColor = UIColor(hexaString: "#A1A19E")
}else{
edit = UITableViewRowAction(style: .Normal, title: "Mark\nRead") { action, index in
object.setValue(true, forKey: "read")
do{
try context.save()
}catch{
}
tableView.reloadData()
self.updateReadAll()
}
edit.backgroundColor = UIColor(hexaString: "#A1A19E")
}
return [edit]
}else{
return []
}
}
didChangeObject不能用于批量更新吗?我还能做些什么来更新细胞吗?
答案 0 :(得分:1)
观看2014 WWDC关于批量更新的视频。基本上,更新是在磁盘上进行的,但数据的内存副本是 NOT 更新。您必须自己更新内存中的对象,重置上下文或单独刷新每个对象。