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没有返回任何行的主要内容,如果未能解决你的问题,请参考以下文章

Android片段不会显示

片段视图返回后执行的 Firebase 查询

CoreData 测试实体是不是为空

以编程方式将按钮添加到片段

从另一个片段返回时如何在视图页面中显示片段?

使用 NSPredicate 按日期过滤 coredata 不返回任何内容