6

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

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

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

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

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

这对我来说似乎是错误的,但这是我似乎可以让机制工作的唯一方法。我在运行第一个代码块后查看了 sqlite DB,并且没有填写反向关系,但是如果我运行第二个代码,则关系就在那里。

此外,似乎一旦我在 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];    

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

[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();
    }

}
4

2 回答 2

8

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

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

于 2011-07-13T22:48:32.097 回答
1

重要的安全提示。如果您将 NSManagedObject 子类化,请不要将 @synthesize 用于您的成员变量。请改用@dynamic。

于 2011-07-15T22:20:57.800 回答