从CoreData中删除实体数据

时间:2015-09-12 14:25:03

标签: ios swift core-data

在标题中,我想在用户退出帐户

时从CoreData中删除数据

我写的是:

let moc = DataController().managedObjectContext
var context : NSManagedObjectContext?
var entityCurrentValue : NSEntityDescription?
var entityPreviousValue : NSEntityDescription?
var entityLastAccess : NSEntityDescription?

override func viewDidLoad() {

    super.viewDidLoad()


    loadCoreData()


    }
}

func loadCoreData(){
    context = moc

    entityCurrentValue = NSEntityDescription.entityForName("CurrentValue", inManagedObjectContext: context!)
    entityPreviousValue = NSEntityDescription.entityForName("PreviousValue", inManagedObjectContext: context!)
    entityLastAccess = NSEntityDescription.entityForName("LastAccess", inManagedObjectContext: context!)
}

@IBAction func logoutButton_clicked(Sender: UIButton!) {

    PFUser.logOut()

    deleteElement(entityCurrentValue!)
    deleteElement(entityPreviousValue!)
    deleteElement(entityLastAccess!)
    self.performSegueWithIdentifier("loginSegue", sender: Sender)

}

在这个函数中我尝试删除实体中的元素

func deleteElement(entity : NSEntityDescription){

    let fetchRequest = NSFetchRequest()
    fetchRequest.entity = entity
    fetchRequest.fetchBatchSize = 50
    var fetchResult = Array<AnyObject>()

    do{
        try fetchResult = (context?.executeFetchRequest(fetchRequest))!
    }catch{
        fatalError()
    }

    for entity in fetchResult as! [NSManagedObject] {
        self.context?.deleteObject(entity)
    }
}

问题在于,当我退出时,并且我使用其他帐户登录时,应用程序会加载已存储到内存中的数据。有人能帮我吗?感谢

1 个答案:

答案 0 :(得分:0)

托管对象上下文仅是磁盘上数据的虚拟表示。因此,当您从托管对象上下文中删除对象时,它不会从磁盘中删除,而只是在上下文中标记为已删除。

为了在磁盘上保留上下文的更改,您需要在执行删除操作后保存上下文,这是代码中缺少的内容。