我有上面的CoreData方案。我怎样才能删除其中的所有内容?有一种简单快捷的方式吗?
更新
好的,我试试这个
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.)")*
答案 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];
}
修改强>
在Multiplechoice
和Answer
之间将规则设置为仅取消,因为您有一个循环,否则可能会失败。你是如何为其余的设置删除规则的? cascade
只需要是单向的,因此例如在Minigame
中,对于名为coupon
的关系,您需要cascade
,但对于反向关系(minigame
, Coupon
)您只需要nullify
答案 2 :(得分:0)
我建议使用NSFileManager
删除持久数据存储文件并再次设置核心数据堆栈。