Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否必须手动设置核心数据对象';iPhone上代码的反向关系_Iphone_Core Data_Relationship_Inverse - Fatal编程技术网

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

我是否必须手动设置核心数据对象';iPhone上代码的反向关系,iphone,core-data,relationship,inverse,Iphone,Core Data,Relationship,Inverse,我是新的核心数据,请原谅我,如果我得到一些条款错误 我的xcdatamodel文件中有几个对象。它们都是相互联系的关系和反向关系。如果使用以下代码连接其中两个对象,则不会设置反向关系 [managedObj1 setValue: managedObj2 forKey:@"relatiohipName"]; 我似乎必须手动设置与以下代码的反向关系 [managedObj1 setValue: managedObj2 forKey:@"relatiohipName"]; [managedObj2

我是新的核心数据,请原谅我,如果我得到一些条款错误

我的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对象中。上下文是“管理”对象并执行自动关系设置等操作的对象。上下文也是将对象写入持久存储的内容

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

您的换档键断了吗?没有大写字母和标点符号的写作对于短文本来说是可以的,但它会使文章难以在段落中阅读。我已经编辑了这篇文章,但在将来花点时间让你的问题更容易让别人阅读。很多人会放弃阅读这样一个懒散的问题。如果没有插入它们,你会认为它们不会出现在sqlite DP中。我不相信它们会出现,特别是如果它们在重新启动后消失。直接查看SQL并不能告诉您核心数据的实际操作,因为SQL并不是其功能的核心。我建议在创建托管对象和保存上下文的地方发布代码。显然,这里发生了一些不寻常的事情。请检查您的构建,以确保没有出现多个数据模型文件。如果您实际使用的模型文件没有关系,而您认为使用的模型文件没有关系,则会导致此问题。永久存储保存和读取数据的不是SQL文件吗?我同意有些奇怪的事情正在发生。我知道在哪里可以找到问题。如果结果是徒劳的,我会回来的。这些物体不一定会消失。它们仍然在我查找过的SQL文件中。我从持久性存储中获取正确数量的父对象。他们的成员变量都是零。哈!从来没有遇到过!甚至都没想到。合成的访问器不会正确触发上下文的KVO。我知道。我看到的所有核心数据示例都没有提到使用@dynamic。我找到它的唯一方法是让Xcode从xcdatamodel文件生成类文件。