使用“未知命令类型<nsbatchdeleterequest,..>”执行NSBatchDeleteRequest时应用程序崩溃

时间:2015-12-12 10:36:39

标签: swift macos core-data

我正在编写OS X应用程序,它需要能够删除其Core Data存储中保存的所有“SongEntity”实例。 但是,当我尝试执行NSBatchDeleteRequest时,我的应用程序崩溃,使用以下控制台输出(摘录):

  

未知命令类型(实体:SongEntity;谓词:   ((空值)); sortDescriptors:((null));类型:   NSManagedObjectIDResultType; )&gt;

这是我的实施:

func clearStore()
{
    let fetchRequest = NSFetchRequest(entityName: "SongEntity")
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)

    do
    {
        try managedObjectContext.executeRequest(deleteRequest)
    }
    catch
    {
        fatalError("Not able to perform operation: \(error)")
    }
    managedObjectContext.reset()
}

非常感谢任何帮助

修改 事实证明,此问题与所选的商店类型有关: 从班级NSBatchDeleteRequest

//  May not be supported by all store types.

我尝试将商店类型从NSXMLStoreType(默认为macOS模板)更改为NSSQLiteStoreType,现在可以正常使用了。

2 个答案:

答案 0 :(得分:6)

我在持久性存储上也使用NSInMemoryStoreType遇到了这个问题。事实证明,并非所有商店类型都支持批量删除,因此我不得不切换到使用获取请求,并简单地遍历托管对象并逐个删除它们。

答案 1 :(得分:3)

NSBatchDeleteRequest在持久性存储协调器上执行,而不是在托管对象上下文上执行。

try persistentStoreCoordinator.executeFetchRequest(
    batchDeleteRequest, withContext:context
)