在上下文之间传递 objectID 时未触发 to-many 错误

Posted

技术标签:

【中文标题】在上下文之间传递 objectID 时未触发 to-many 错误【英文标题】:to-many fault not fired when passing objectID between contexts 【发布时间】:2014-12-03 17:29:18 【问题描述】:

我有两个上下文:parentContext 和 childContext。当我尝试将 objectID 从 childContext 传递给 parentContext 时,不会为 parentContext 中的多对关系触发错误。

一对多关系称为“类别”并且是无序的(NSSet)。

NSManagedObjectContext *parentContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
childContext.parentContext = parentContext;
childContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;

NSSet *childObjects = [childContext registeredObjects];

[childContext save:NULL];

[parentContext performBlockAndWait:^
    for (NSManagedObject *childObject in childObjects) 
        NSManagedObject *parentObject = [parentContext objectWithID:childObject.objectID];
        // [parentObject hasFaultForRelationshipNamed:@"categories"]; returns false
        // [childObject hasFaultForRelationshipNamed:@"categories"]; // returns true as expected
        [parentContext refreshObject:parentObject mergeChanges:YES];
    
];

即使在 parentContext 中,我也希望“类别”关系出错。你能帮忙吗?

【问题讨论】:

您是否尝试访问该关系?不清楚您要解决什么问题。 是的,当我尝试访问 parentObject 中的关系时,它不会按预期触发错误。 刷新后怎么样?仍然不清楚您要解决哪个问题。 将对象保存在 childContext 中后,我希望将更改传播到 parentContext。所以,我试图刷新 parentContext 中的对象,但是当我尝试访问关系时,没有触发任何错误,我总是得到一个空集。刷新后我也得到相同的行为。 【参考方案1】:

我想您还必须保存父上下文。子上下文保存仅将更改“推送”到父上下文,但此时它们不会保存到存储中。

一旦父上下文被保存,你的错误就会触发。

【讨论】:

以上是关于在上下文之间传递 objectID 时未触发 to-many 错误的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 和 FCM(Firebase 云消息传递)onMessage、onResume 和 onLaunch 在单击通知时未触发(包:firebase_messaging 7.0.0)

尝试使用 useContext() 获取对象时未定义对象

触发器在操作时未触发

既然 objectID 在临时对象和永久对象之间发生变化,如何有效地处理 Core Data 中的临时对象?

应用程序在后台时未触发地理围栏通知

鼠标退出按钮时未触发 MouseExited