我是iOS开发新手,我正在创建我的第一个应用程序,很抱歉,如果问题非常糟糕。我在Xcode中使用Master / Detail模板并使用Core Data。我更改了模板以在tableView中使用自定义单元格样式。当用户想要添加某些内容时,他们会切换到另一个视图以完成表单。当用户单击“保存”时,表单数据将保存到Core Data,然后视图将返回到MasterView。
我的问题是,当表单保存时,tableView会更新以显示新单元格,但它间歇性地为空tableView。有时这会发生,有时则不会发生。单元格保持空白,直到应用程序从应用程序切换器关闭并重新打开。
有什么我忘记改变的吗?谢谢你的帮助。
以下是我在模板中更改的用于添加自定义单元格样式的函数:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomTableViewCell
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject
self.configureCell(cell, withObject: object)
return cell
}
func configureCell(cell: CustomTableViewCell, withObject object: NSManagedObject) {
let imageData: NSData = object.valueForKey("image") as! NSData
let picture: UIImage = UIImage(data: imageData)!
let date: NSDate
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.currentLocale()
cell.cellImage.image = picture
cell.locationNameLabel!.text = object.valueForKey("name")!.description
cell.categoryLabel!.text = object.valueForKey("category")!.description
date = object.valueForKey("date")! as! NSDate
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
cell.dateLabel!.text = dateFormatter.stringFromDate(date)
}
这是我为FetchedResultsController
更改的唯一功能func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
switch type {
case .Insert:
tableView.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
case .Delete:
tableView.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
case .Update:
self.configureCell(tableView.cellForRowAtIndexPath(indexPath!)! as! CustomTableViewCell, withObject: anObject as! NSManagedObject)
case .Move:
tableView.moveRowAtIndexPath(indexPath!, toIndexPath: newIndexPath!)
}
}
答案 0 :(得分:0)
我认为您可能需要在添加单元格之后重新加载数据,并且当您将segue返回到表格视图时。您可以使用self.tableView.reloadData()
重新加载整个表格,或self.tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: UITableViewRowAnimation.None)
重新加载特定单元格。
我希望这会有所帮助:)
答案 1 :(得分:0)