【问题标题】:Delete entity data from CoreData从 CoreData 中删除实体数据
【发布时间】:2015-09-12 14:25:03
【问题描述】:

如标题所示,当用户从其帐户注销时,我想从 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)
    }
}

问题是,当我注销,然后使用另一个帐户登录时,应用程序会加载已经存储到内存中的数据。有人能帮我吗?谢谢

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-23
      • 2016-09-30
      • 2014-11-20
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多