CoreData没有返回任何行

问题描述 投票:0回答:1

我正在尝试这样做,以便当用户退出我的应用程序时,使用下面的功能擦除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%有应该返回的条目,因为如果我在启动时调用相同的函数,则填充数组。

关于是什么导致这个的任何想法?

ios swift core-data
1个回答
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
}
© www.soinside.com 2019 - 2024. All rights reserved.