gpt4 book ai didi

ios - NSBatchDeleteRequest留下不良关系

转载 作者:行者123 更新时间:2023-12-01 16:23:59 26 4
gpt4 key购买 nike

我有一个Project对象,它与Image有很多关系,删除规则设置为cast的project.images和Nullify的image.project。在这种情况下,我需要清除附加的图像,但要保持项目本身不变。有很多图像,所以我想使用批处理删除功能来一次获得所有图像。

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Image"];
request.predicate = [NSPredicate predicateWithFormat:@"project = %@", project];
NSBatchDeleteRequest *delete = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request];
delete.resultType = NSBatchDeleteResultTypeObjectIDs;
NSError *error;
NSBatchDeleteResult *result = [context.persistentStoreCoordinator executeRequest:delete withContext:context error:&error];
if (error) {
// todo
}
[NSManagedObjectContext mergeChangesFromRemoteContextSave:@{NSDeletedObjectsKey : [result result]} intoContexts:@[context]];

NSLog(@"images: %@", project.images); // Still has all the images (they are now flagged as isDeleted)

[context save:&error];

NSLog(@"images: %@", project.images); // Still has all the images...

根据 docsmergeChangesFromRemoteContextSave行应负责更新上下文,但这似乎没有发生。

还有一件事,我知道我可以设置 project.images = nil并完成此工作,但是在仅删除图像子集的情况下不能使用。

编辑:我进一步调查,并有更多的信息。
project.images是故障时,会发生此问题。如果我强迫它们全部出错,则删除完成后,关系将成功更新。如果我将它们留为故障,则该关系将保持不变,并且将指向不存在的对象。

最佳答案

mergeChangesFromRemoteContextSave中,尝试将NSUpdatedObjectsKey包含在项目的objectID中。

[NSManagedObjectContext mergeChangesFromRemoteContextSave:@{NSUpdatedObjectsKey : @[project.objectID], NSDeletedObjectsKey : [result result]} intoContexts:@[context]];`

关于ios - NSBatchDeleteRequest留下不良关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41735885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com