CoreData没有返回任何行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CoreData没有返回任何行相关的知识,希望对你有一定的参考价值。
我正在尝试这样做,以便当用户退出我的应用程序时,使用下面的功能擦除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%有应该返回的条目,因为如果我在启动时调用相同的函数,则填充数组。
关于是什么导致这个的任何想法?
答案
消息提取具有签名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
}
以上是关于CoreData没有返回任何行的主要内容,如果未能解决你的问题,请参考以下文章