Core data NSInMemoryStoreType是否与NSBatchDeleteRequest不兼容?

Core data NSInMemoryStoreType是否与NSBatchDeleteRequest不兼容?,core-data,nspersistentstore,nsbatchdeleterequest,Core Data,Nspersistentstore,Nsbatchdeleterequest,我目前正在对一个与核心数据交互的层进行单元测试。它保存、删除和更新项对象。但是,我的测试尝试保存两个项,然后执行批量删除,但一直失败 这是项: 扩展项{ //标记:-属性 @NSManaged public var日期:NSDate @NSManaged public var isTaxable:Bool @NSManaged公共变量名称:String @NSM管理的公共var价格:NSDecimalNumber @NSV管理的公共var数量:双 //标记:-获取请求 @nonobjc公共类fu

我目前正在对一个与核心数据交互的层进行单元测试。它保存、删除和更新
对象。但是,我的测试尝试保存两个
项,然后执行批量删除,但一直失败

这是

扩展项{
//标记:-属性
@NSManaged public var日期:NSDate
@NSManaged public var isTaxable:Bool
@NSManaged公共变量名称:String
@NSM管理的公共var价格:NSDecimalNumber
@NSV管理的公共var数量:双
//标记:-获取请求
@nonobjc公共类func fetchRequest()->NSFetchRequest{return NSFetchRequest(entityName:“Item”)}
//标记:-验证
//需要手动验证“十进制”值。雷达仍处于打开状态,位于https://openradar.appspot.com/13677527.
public override func validateValue(u值:AutoreleasingUnsafeMutablePointer,forKey:String)抛出{
如果key==“price”,则将decimal=value.pointee设为?decimal{if decimal
这是与核心数据交互的对象,
CoreDataStack

内部类CoreDataStack{
//标记:-属性
私有let modelName:String
内部惰性var storeContainer:NSPersistentContainer={
let container=NSPersistentContainer(名称:self.modelName)
container.loadPersistentStores{(storeDescription,error)在if-let error=error中作为NSError?{fatalError(“未解决的错误\(error),\(error.userInfo)”)}
返回容器
}()
内部惰性var managedContext:NSManagedObjectContext={return self.storeContainer.viewContext}()
//标记:-初始化
内部初始化(modelName:String=“Cart”){self.modelName=modelName}
//马克:节省
内部func saveContext()抛出{
guard managedContext.hasChanges else{return}
do{try managedContext.save()}将let错误捕获为NSError{throw error}
}
}
这是使用核心数据管理持久性的对象:

内部最终类ItemPersistenceService{
//标记:-属性
私有let coreDataStack:coreDataStack
//标记:-初始化
内部初始化(coreDataStack:coreDataStack){
self.coreDataStack=coreDataStack
打印(“init(coreDataStack:)-ItemPersistenceService”)
}
//马克:节省
@discardableResult内部函数保存项(withInformation:ItemInformation)抛出->项{
let item=item(上下文:coreDataStack.managedContext)
item.name=information.name
item.quantity=信息.quantity
item.price=信息.price作为NSDecimalNumber
item.date=信息.date作为NSDate
item.isTaxable=information.isTaxable
做{
请尝试coreDataStack.saveContext()
}将let错误捕获为NSError{
抛出错误
}
退货项目
}
//标记:-删除
内部函数删除(项目:项目)抛出{
coreDataStack.managedContext.delete(项目)
做{
请尝试coreDataStack.saveContext()
}将let错误捕获为NSError{
抛出错误
}
}
内部函数deleteAllItems()抛出{
let fetchRequest=NSFetchRequest(entityName:Item.description())
let deleteRequest=NSBatchDeleteRequest(fetchRequest:fetchRequest)
做{
尝试coreDataStack.managedContext.persistentStoreCoordinator?.execute(deleteRequest,with:coreDataStack.managedContext)
}将let错误捕获为NSError{
抛出错误
}
}
//马克:-抓取
内部函数ItemScont()抛出->Int{
let fetchRequest=NSFetchRequest(entityName:Item.description())
fetchRequest.resultType=.countResultType
做{
let result=尝试coreDataStack.managedContext.fetch(fetchRequest)
guard let count=result.first?.intValue else{fatalError(“无效结果”)}
返回计数
}抓住{
抛出错误
}
}
}
这是我用于测试的
CoreDataStack
子类,它包含内存存储:

内部最终类TestCoreDataStack:CoreDataStack{
//标记:-初始化
内部重写初始化(modelName:String=“Cart”){
super.init(modelName:modelName)
让persistentstorescription=nspersistentstorescription()
persistentStoreDescription.type=NSInMemoryStoreType
let container=NSPersistentContainer(名称:modelName)
container.persistentstorescriptions=[persistentstorescription]
container.loadPersistentStores{(storeDescription,错误)位于
如果让error=error作为NSError?{fatalError(“未解决的错误\(error),\(error.userInfo)”)}
self.storeContainer=容器
}
}
}
最后,这是一个不断失败的测试:

internal func test\u ItemPersistenceService\u Delete\u All\u Managed\u Object\u Context\u Saved(){
做{
试用service.saveItem(withInformation:information)
试用service.saveItem(withInformation:information)
}catch{XCTFail(“应为'Item`')}
预期(用于通知:.NSManagedObjectContextDidSave,对象:coreDataStack.managedContext){(通知)返回true}
do{try service.deleteAllItems()}捕获{XCTFail(“预期删除”)}
WaitForExpections(超时:2.0){XCTAssertNil中出现错误(错误,“预期会发生保存”)}
}
问题

NSInMemoryStoreType与
var container: NSPersistentContainer!

override func setUp() {
    super.setUp()
    container = NSPersistentContainer(name: "ModelName")
    container.persistentStoreDescriptions[0].url = URL(fileURLWithPath: "/dev/null")
    container.loadPersistentStores { (description, error) in
        XCTAssertNil(error)
    }
}