分配给核心数据对象中的关系似乎会破坏对象

Posted

技术标签:

【中文标题】分配给核心数据对象中的关系似乎会破坏对象【英文标题】:Assigning to relationship in core data object appears to corrupt the object 【发布时间】:2014-11-02 23:43:59 【问题描述】:

我正在尝试创建一个子对象并通过将父 id 分配给子对象中的关系将其加入其父对象。我使用此代码:

    Serial *object = [NSEntityDescription insertNewObjectForEntityForName:@"Serial" inManagedObjectContext:AppDelegatePtr.managedObjectContext];
    NSLog(@"context is %@", object.managedObjectContext);
    [object setValue:self.textNarrative.text forKey:@"narrative"];
    NSLog(@"%@",[[SMNetworkModel sharedInstance ] selectedExerciseID]);
    [object setInExercise:(Exercise *)[[SMNetworkModel sharedInstance ] selectedExerciseID]];
    NSError *error;
    if (![AppDelegatePtr.managedObjectContext save:&error])
    
        NSLog(@"Failed to save - error: %@", [error localizedDescription]);
    

但是,它给出了以下调试/错误:

2014-11-02 23:36:49.622 RVP[4464:139260] context is <NSManagedObjectContext: 0x7faf19fa1140>
2014-11-02 23:36:49.623 RVP[4464:139260] 0xd000000000040000 <x-coredata://D08DF3CD-A5E0-4445-B7C4-A84448110BDA/Exercise/p1>
2014-11-02 23:36:49.623 RVP[4464:139260] -[_NSCoreDataTaggedObjectID managedObjectContext]: unrecognized selector sent to instance 0xd000000000040000

错误是在上述代码的第 5 行产生的。似乎父对象 ID(如在调试中)以某种方式覆盖了托管实体对象中的托管对象上下文属性。这种关系在这个实体中是一对一的,而在反向中是一对多的。如果我也将其更改为 1:1 倒数,它不会影响错误。如果我注释掉第 5 行,该对象将被保存,但作为一个孤立对象。

我做错了什么?

【问题讨论】:

【参考方案1】:

看起来你正在做的是分配关系的 ID 值,这是完全错误的。

Core Data 不是数据库。您不管理将对象相互关联的表。您将对象设置为其他对象关系。我建议你多研究一下核心数据关系。

另外,尝试使用您自己的 ManagedObject 子类;它消除了所有对属性的直接 KVC 访问,并且在视觉上更容易一些。一旦您对 Core Data 更加熟悉,我建议您使用 mogenerator。

【讨论】:

谢谢! 35 年的 SQL 让我有了一定的范式!事实上,我只需要在这里更改一行代码,在别处更改一行代码来存储对象而不是对象 id,这一切都变得生动起来。再次感谢。

以上是关于分配给核心数据对象中的关系似乎会破坏对象的主要内容,如果未能解决你的问题,请参考以下文章

解析本地数据存储:取消固定对象似乎在 Swift 中被破坏

将对象的指针提供给构造函数会导致对象被破坏[重复]

为啥 Rcpp 会破坏 xts 对象?

当它们的容器被破坏时,如何删除这些动态分配的对象?

可以在 C++(17) 中捕获某些对象属性的破坏性分配事件吗?

Java - 创建类关闭时是否会破坏对象引用?