我有两个带表格视图的VC,第一个显示类别,第二个显示所选类别的项目(食谱)。我能够使用NSPredicate让RecipeTableVC显示过滤数据,但我还没有弄清楚如何从Core Data中删除配方,因为显示的数据是一个只包含谓词数据的变量。
这是我的获取:
func attemptRecipeFetch() {
let fetchRecipeRequest = NSFetchRequest(entityName: "Recipe")
let sortDescriptor = NSSortDescriptor(key: "name", ascending: true)
fetchRecipeRequest.sortDescriptors = [sortDescriptor]
let controller = NSFetchedResultsController(fetchRequest: fetchRecipeRequest, managedObjectContext: ad.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
fetchedRecipeController = controller
do {
try self.fetchedRecipeController.performFetch()
let allRecipes = fetchedRecipeController.fetchedObjects as! [Recipe]
recipesOfCategory = allRecipes.filter { NSPredicate(format: "category = %@", selectedCategory!).evaluateWithObject($0) }
} catch {
let error = error as NSError
print("\(error), \(error.userInfo)")
}
}
所以填充我的表的是recipesOfCategory数组。
这是我到目前为止删除的尝试:
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
recipesOfCategory.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
ad.managedObjectContext.delete(recipesOfCategory[indexPath.row])
}
}
这崩溃了,我理解为什么,但仍然没有提出解决方案。有没有办法实现滑动删除从Core Data删除配方的位置?我是否使用正确的方法用过滤后的数据填充表格?
答案 0 :(得分:0)
在tableView:commitEditingStyle:
中,您需要只从Core Data中删除基础对象,而不是从表视图中删除。 NSFetchedResultsController
委托方法将告诉您何时从表视图中删除它。
答案 1 :(得分:0)
我使用以下代码' 滑动以从核心数据中删除'在我最近做的应用程序的表视图中。我可能会为你工作。
在您的" tableView:commitEditingStyle ",
<强> 1。使用...
设置CoreData访问权限let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate let context: NSManagedObjectContext = appDel.managedObjectContext
<强> 2。删除所需的行+包含。来自核心数据......
如果editingStyle == UITableViewCellEditingStyle.Delete {
context.deleteObject(self.resultsList [indexPath.row])//始终在之前 作为CoreD
self.resultsList.removeAtIndex(indexPath.row) do { try context.save() } catch { print("Error unable to save Deletion") } } // end IF EditingStyle self.tableView.reloadData()