我是否必须在iPhone上的代码中手动设置核心数据对象的反向关系

iHo*_*rse 5 iphone core-data inverse relationship

我是核心数据的新手,所以如果我弄错了一些条款,请原谅.

我的xcdatamodel文件中有几个对象.它们都与关系和反向关系相互关联.如果我使用以下代码连接其中两个对象,则不设置反向关系.

[managedObj1 setValue: managedObj2 forKey:@"relatiohipName"]; 
Run Code Online (Sandbox Code Playgroud)

我似乎必须使用以下代码手动设置反向关系

[managedObj1 setValue: managedObj2 forKey:@"relatiohipName"];
[managedObj2 setValue: managedObj1 forKey:@"inverseRelatiohipName"];
Run Code Online (Sandbox Code Playgroud)

这似乎对我来说是错误的,但它是我能够使机制发挥作用的唯一方法.我在运行第一个代码块之后查看了sqlite数据库并且没有填充反向关系,但如果我运行第二个代码,那么关系就在那里.

而且,似乎一旦我在Core Data中创建了一个对象,我就无法在之后改变它.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];    
Run Code Online (Sandbox Code Playgroud)

这是我分配其中一个对象成员变量的地方:

[self setValue:newChild forKey:@"advertisement"];
            //self.advertisement = newChild;
Run Code Online (Sandbox Code Playgroud)

这是我保存上下文的地方:

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

}
Run Code Online (Sandbox Code Playgroud)

Tec*_*Zen 6

如果未在数据模型中设置倒数关系,则必须手动设置关系的两侧.如果这样做,则分配关系的一侧会自动分配另一侧.这是数据模型的功能之一.

听起来像你实际上没有将对象插入到NSManagedObjectContext对象中.上下文是"管理"对象并执行自动关系设置之类的操作.上下文也是将对象写入持久性存储的原因.


iHo*_*rse 1

重要的安全提示。如果您是 NSManagedObject 的子类,请不要使用 @synthesize 作为您的成员变量。请改用@dynamic。