从核心数据中删除记录

时间:2018-11-10 19:28:59

标签: ios swift core-data

我的数据库中有2个表:CarGarage

其中CarGarage通过外键相互连接:

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天了,无法解决。所以我想也许我什么也看不见或错过任何东西。 预先感谢您的宝贵时间!

1 个答案:

答案 0 :(得分:1)

documentation中,直接在后备存储上调用此请求(很可能您在此处使用sqlite)。由于此处未涉及核心数据框架层,因此删除似乎使sqlite处于不良状态。

我对不良状态的猜测:所有不活动的汽车都被删除,但是由于未处理它们之间的关系,车库仍然保留着对它们的引用。