我有一个非常简单的类,我用它来尝试学习基于主细节视图模板的核心图像。添加新项目时,数据保存正常。但当我删除它时,上下文说没有什么可以改变的。
删除事件后,如何正确地将更新的对象类保存到coreimage的任何想法。
以下是类变量:
import UIKit
import CoreData
class MasterViewController: UITableViewController {
var objects: [Event]!
以下是处理从Tableview添加和删除的方法:
func insertNewObject(sender: AnyObject) { //Triggered by add button in top menu
objects.insert(Event(context: sharedContext), atIndex: 0)
let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
CoreDataStackManager.sharedInstance().saveContext()
}
//Delete method is done via editing:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
objects.removeAtIndex(indexPath.row)
CoreDataStackManager.sharedInstance().saveContext() // This doesn't result in CoreData thinking that the main object has changed
println(objects.count)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
} else if editingStyle == .Insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}
}
事件模型作为NSManaged对象完成:
import Foundation
import CoreData
@objc(Event)
class Event : NSManagedObject {
@NSManaged var timeStamp: NSDate
override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
}
init(context: NSManagedObjectContext) {
let entity = NSEntityDescription.entityForName("Event", inManagedObjectContext: context)!
super.init(entity: entity, insertIntoManagedObjectContext: context)
timeStamp = NSDate()
}
}
欢迎任何帮助。
答案 0 :(得分:2)
您从objects
阵列中删除了该对象,但未从托管中删除该对象
对象上下文。你必须添加
sharedContext.deleteObject(objects[indexPath.row])
(如果您使用NSFetchedResultsController
作为表格视图数据源,那么这将是唯一的必要操作,因为表格视图
然后将从获取的结果控制器自动更新
委托方法。)