删除所有核心数据数据

时间:2015-04-24 07:18:23

标签: ios swift core-data

我有上面的CoreData方案。我怎样才能删除其中的所有内容?有一种简单快捷的方式吗?

enter image description here

更新

好的,我试试这个

func flushDatabase() {
    if let moc = self.managedObjectContext{
        moc.lock()

        if let stores = persistentStoreCoordinator?.persistentStores as? [NSPersistentStore] {
            for store in stores {
                persistentStoreCoordinator?.removePersistentStore(store, error: nil)
                if let path = store.URL?.path {
                    NSFileManager.defaultManager().removeItemAtPath(path, error: nil)
                }
            }
        }

        moc.unlock()



    }
}

但我如何重新创建persistenStoreCoordinator?

更新2

 class func deleteAllMinigames(context:NSManagedObjectContext) {
        context.lock()
        let fetchRequest = NSFetchRequest(entityName: "Minigame")
//        fetchRequest.includesSubentities = true
//        fetchRequest.includesPropertyValues = false
        var error: NSError?
        if let items = context.executeFetchRequest(fetchRequest, error: &error) as? [Minigame]{
            for item in items {
                if item.validateForDelete(&error){
                    context.deleteObject(item)
                }else{
                    println(error?.localizedDescription)
                }

            }
        }
        context.unlock()

    }

当我试图删除所有迷你游戏时,我得到了这个。我试图将所有删除规则删除到cacsade但它不起作用

*Optional("The operation couldn’t be completed. (Cocoa error 1560.)")
Optional("The operation couldn’t be completed. (Cocoa error 1560.)")
Optional("The operation couldn’t be completed. (Cocoa error 1560.)")
Optional("The operation couldn’t be completed. (Cocoa error 1560.)")
Optional("The operation couldn’t be completed. (Cocoa error 1560.)")
Optional("The operation couldn’t be completed. (Cocoa error 1560.)")*

3 个答案:

答案 0 :(得分:2)

这意味着强制性财产被指定为零。在您的* .xcodatamodel中检查"可选"框或当您保存到managedObjectContext时,请确保填写您的属性。

如果您在更改代码后出现进一步的错误以满足这两个要求,请尝试清理构建并从iPhone模拟器/ iPhone设备中删除该应用程序。您的模型更改可能与旧模型实现发生冲突。

编辑:

我几乎忘记了核心数据吐出的所有错误代码:Core Data Constants Reference之前我遇到了麻烦,我意识到我取消选中了正确的可选框。找出问题的麻烦。祝你好运。

答案 1 :(得分:1)

由于每个实体都以某种方式连接到您的Minigame,因此您可以将删除规则设置为从关系中进行级联,只需删除所有Minigames即可。它会自动删除其余的东西,使用像这样的东西:

+ (void)deleteAllMinigamesInManagedObjectContext:(NSManagedObjectContext *)context
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Minigame"];
    NSArray *fetchedObjects = [context executeFetchRequest:request error:NULL];
    for (Minigame *game in fetchedObjects) {
        [context deleteObject:game];
    }
    [context save:NULL];
}

修改

MultiplechoiceAnswer之间将规则设置为仅取消,因为您有一个循环,否则可能会失败。你是如何为其余的设置删除规则的? cascade只需要是单向的,因此例如在Minigame中,对于名为coupon的关系,您需要cascade,但对于反向关系(minigameCoupon)您只需要nullify

答案 2 :(得分:0)

我建议使用NSFileManager删除持久数据存储文件并再次设置核心数据堆栈。