gpt4 book ai didi

iphone - iPhone上是否需要在代码中手动设置核心数据对象的逆关系

转载 作者:行者123 更新时间:2023-12-03 18:43:55 26 4
gpt4 key购买 nike

我是核心数据新手,所以如果我弄错了一些术语,请原谅。

我的 xcdatamodel 文件中有几个对象。它们都是相互关联、相互关联的。如果我使用以下代码连接其中两个对象,则不会设置逆关系。

[managedObj1 setValue: managedObj2 forKey:@"relatiohipName"]; 

我似乎必须使用以下代码自己手动设置逆关系

[managedObj1 setValue: managedObj2 forKey:@"relatiohipName"];
[managedObj2 setValue: managedObj1 forKey:@"inverseRelatiohipName"];

这对我来说似乎是错误的,但它似乎是我让该机制发挥作用的唯一方法。我在运行第一个代码块后查看了 sqlite DB,并且未填写逆关系,但如果我运行第二个代码,则关系就在那里。

此外,似乎一旦我在核心数据中创建了一个对象,我就无法再更改它了。 dp 保持不变。一旦我退出应用程序并重新启动它,我似乎就失去了对象的所有关系和属性。我的代码中生成的对象除了 nil 成员变量之外什么都没有。

编辑:

注释掉的内容是以前完成的方式,未注释的内容是我现在的做法,但运气不好。

这是我创建对象的地方:

NSEntityDescription* mobileEntity = [NSEntityDescription entityForName:@"WebServiceAuthService_mobileAdvertisementVO" inManagedObjectContext:managedObjectContext];
WebServiceAuthService_mobileAdvertisementVO *newObject = [NSEntityDescription insertNewObjectForEntityForName:[mobileEntity name] inManagedObjectContext:managedObjectContext];
//WebServiceAuthService_mobileAdvertisementVO *newObject = [NSEntityDescription insertNewObjectForEntityForName:@"WebServiceAuthService_mobileAdvertisementVO" inManagedObjectContext:managedObjectContext];

这是我分配对象成员变量之一的位置:

[self setValue:newChild forKey:@"advertisement"];
//self.advertisement = newChild;

这是我保存上下文的位置:

NSError *error = nil;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
DLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

}

最佳答案

如果您没有在数据模型中设置互惠关系,则必须手动设置关系的双方。如果这样做,则分配关系的一侧会自动分配另一侧。这是数据模型的功能之一。

在我看来,您实际上并没有将对象插入 NSManagedObjectContext 对象中。上下文是“管理”对象并执行诸如自动关系设置之类的操作的东西。上下文还将对象写入持久存储。

关于iphone - iPhone上是否需要在代码中手动设置核心数据对象的逆关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685407/

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