无法让CoreData删除对象

时间:2015-08-19 10:30:11

标签: ios swift core-data

我有一个非常简单的类,我用它来尝试学习基于主细节视图模板的核心图像。添加新项目时,数据保存正常。但当我删除它时,上下文说没有什么可以改变的。

删除事件后,如何正确地将更新的对象类保存到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()
}

}

欢迎任何帮助。

1 个答案:

答案 0 :(得分:2)

您从objects阵列中删除了该对象,但未从托管中删除该对象 对象上下文。你必须添加

 sharedContext.deleteObject(objects[indexPath.row])

(如果您使用NSFetchedResultsController作为表格视图数据源,那么这将是唯一的必要操作,因为表格视图 然后将从获取的结果控制器自动更新 委托方法。)