我的数据库中有2个表:Car
和Garage
其中Car
和Garage
通过外键相互连接:
在Car
中,外键是carHasGarages
。整个架构如下:
Destination: Garage
Inverse: `garageHasCar`
Delete rule: `Cascade`
Type: `To Many`
在Garage
中,外键为garageHasCar
,架构为:
Destination: Car
Inverse: `carHasGarage`
Delete rule: `Nullify`
Type: `To Many`
当我尝试使用谓词批量删除garages
时:
let predicate = NSPredicate(format: "carNbr IN %@", inactiveCars)
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Car")
request.predicate = predicate
let batchDelete = NSBatchDeleteRequest(fetchRequest: request)
do {
try context.execute(batchDelete)
}...
其中inactiveCars
是[Int32]
的数组
我遇到下一个错误:
error: Unhandled error from executeBatchDeleteRequest Constraint
violation: Batch delete failed due to mandatory MTM nullify inverse on Garage/garageHasCar and userInfo {
"_NSCoreDataOptimisticLockingFailureConflictsKey" = (
"<null>"
);
}
有人可以指出我的错误吗?我已经在尝试解决此问题2天了,无法解决。所以我想也许我什么也看不见或错过任何东西。 预先感谢您的宝贵时间!
答案 0 :(得分:1)
在documentation中,直接在后备存储上调用此请求(很可能您在此处使用sqlite)。由于此处未涉及核心数据框架层,因此删除似乎使sqlite处于不良状态。
我对不良状态的猜测:所有不活动的汽车都被删除,但是由于未处理它们之间的关系,车库仍然保留着对它们的引用。