什么是在Swift中清空和保存核心数据表的最简单方法?

时间:2015-03-01 19:55:25

标签: xcode swift sqlite core-data

所以我有一个实体,我将其视为iOS8 XCODE和SWIFT中的简单数据库表。我想删除表中的每个条目。永久性。因此,当我再次启动应用程序时,他们不会重新加载。这是我的代码。

func deleteAllItems(){
        println("All Items are being DELETED")
        var count:Int = 0

        while (HBCContactList.count > 0){
            let AppDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
            let MOContext: NSManagedObjectContext = AppDel.managedObjectContext!
            MOContext.deleteObject(HBCContactList[0] as NSManagedObject)
            HBCContactList.removeAtIndex(0)
            var error:NSError? = nil
            if !MOContext.save(&error){
            abort()
            }
            tableView.reloadData()
        }

看起来好像加载了。当它在屏幕上完成时,UITableView中没有任何内容,一切都很好。但是,如果我编写代码以通过fetch语句返回实体并对记录数进行计数。它仍然说有超过150个结果。

思考?我甚至在正确的球场吗?

1 个答案:

答案 0 :(得分:5)

一种解决方案是获取对象并删除它们。 这是一个示例(确保您指定自己的实体):

// If you'll be using the Managed Object Contexte often,
// you might want to make it a lazy property :
lazy var managedObjectContext : NSManagedObjectContext? = {
    let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    if let managedObjectContext = appDelegate.managedObjectContext {
        return managedObjectContext
    }
    else {
        return nil
    }
}()

func deleteData() {
    let context = self.managedObjectContext!

    let fetchRequest = NSFetchRequest(entityName: "yourEntity")
    fetchRequest.includesPropertyValues = false // Only fetch the managedObjectID (not the full object structure)
    if let fetchResults = context.executeFetchRequest(fetchRequest, error: nil) as? [yourEntity] {

        for result in fetchResults {
            context.deleteObject(result)
        }

    }

    var err: NSError?
    if !context.save(&err) {
        println("deleteData - Error : \(err!.localizedDescription)")
        abort()
    } else {
        println("deleteData - Success")
    }
}