我遇到更新联系人数据的问题。使用tableView查看no.1主视图我有联系人列表。从列表中点击一些人后,我有下一个tableView(查看2号[从视图1推送到视图2])的详细信息和按钮与编辑。接下来如果我按下编辑我有模态视图no3与编辑输入当我可以更改名称。 SAVE之后如何刷新
我在我的观点中使用no1
let managedObjectContext: NSManagedObjectContext? = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext
var fetchedResultsController: NSFetchedResultsController?
override func viewDidLoad() {
super.viewDidLoad()
self.configureView()
fetchedResultsController = NSFetchedResultsController(fetchRequest: CLInstance.allContactsFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController?.delegate = self
do { try fetchedResultsController?.performFetch() } catch _ {}
tableView.reloadData()
}
func controllerWillChangeContent(controller: NSFetchedResultsController) {
tableView.beginUpdates()
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.endUpdates()
}
func controller(
controller: NSFetchedResultsController,
didChangeObject anObject: AnyObject,
atIndexPath indexPath: NSIndexPath?,
forChangeType type: NSFetchedResultsChangeType,
newIndexPath: NSIndexPath?) {
switch type {
case .Insert:
tableView.insertRowsAtIndexPaths(NSArray(object: newIndexPath!) as! [NSIndexPath], withRowAnimation: .Fade)
break
case .Delete:
tableView.deleteRowsAtIndexPaths(NSArray(object: indexPath!) as! [NSIndexPath], withRowAnimation: .Fade)
break
case .Move:
print("move")
//tableView.moveRowAtIndexPath(indexPath!, toIndexPath: newIndexPath!)
break
case .Update:
print("update")
tableView.cellForRowAtIndexPath(indexPath!)
break
}
}
我预计当我在此代码中保存数据时NSFetchedResultsController
进行更新,但在我的日志文件中,我看到打印出来" MOVE"不是"更新"如何以其他方式做到这一点?
答案 0 :(得分:1)
首先,您需要将Outlets配置为要更新的任何屏幕元素。然后你只需将他们的.text属性设置为新值。
tableView有点不同,你必须重新加载它:myTableView.reloadData()
只是一些问题:
如果您的myTableView没有重新加载,请确保
覆盖func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath) - > UITableViewCell {
创建tableViewCell的函数使用更新的源来创建单元格。