我试图做到这一点,以便当用户退出我的应用时,使用下面的功能擦除CoreData。
func wipeMessagesFromDB(){
let moc = managedObjectContext
var array = [cdMessageMO]()
let messageFetch: NSFetchRequest<cdMessageMO> = NSFetchRequest(entityName: "Message")
do {
array = try moc.fetch(messageFetch as! NSFetchRequest<NSFetchRequestResult>) as! [cdMessageMO]//this isnt working!
for managedObject in array
{
let managedObjectData:NSManagedObject = managedObject as NSManagedObject
managedObjectContext.delete(managedObjectData)
}
} catch {
fatalError("Failed to fetch attractions: \(error)")
}
}
问题是如果我在用户注销时调用该函数,则数组长度为0,因此不会擦除任何内容。这很糟糕,因为长度不应该是0.我100%有条目应该返回,因为如果我在启动时调用相同的函数,则填充数组。
关于造成这种情况的任何想法?
答案 0 :(得分:1)
邮件提取具有签名NSFetchRequest<cdMessageMO>
let messageFetch: NSFetchRequest<cdMessageMO>
但是你强行转向NSFetchRequest<NSFetchRequestResult>
array = try moc.fetch(messageFetch as! NSFetchRequest<NSFetchRequestResult>) as! [cdMessageMO]
我很确定永远都会失败(?)
另外,如果你没有对消息做任何事情(只想删除它们),你可以使用更快的批量删除,因为它实际上并没有将对象加载到内存中:
let context = managedObjectContext
let fetch = NSFetchRequest(entityName: "Message")
let delete = NSBatchDeleteRequest(fetchRequest: fetch)
do {
try myPersistentStoreCoordinator.executeRequest(delete, withContext: context)
} catch {
// handle the error
}