CoreData没有返回任何行

时间:2017-01-06 02:36:25

标签: ios swift core-data

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

关于造成这种情况的任何想法?

1 个答案:

答案 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
}