2011-06-13 87 views
1

我刚刚重新设计了我的核心数据文件以利用关系,并且无法通过了解如何使用这个新模型来处理问题。IOS上的核心数据关系

我有一个名为数据存储的实体,它与称为test的第二个实体(测试与数据存储具有多对一关系)具有一对一的关系。我想弄清楚如何在测试实体中选择记录。从我发现从我的goggling我应该写 [test addDrivingConditionsObject:datastore] 这是我应该怎么做,或有没有办法说 [datastore addTestObject:test]我宁愿。 感谢

回答

0

首先,从DataStore到Test以及多对一的另一种方式存在一对一的关系并没有什么意义。

很可能DataStore能够保存对多个Test实例的引用,而Test只能对DataStore实例有一个引用。在这种情况下,您有从DataStore到Test的一对多关系以及从Test到DataStore的多对一​​关系。如我错了请纠正我。

如果我的建模正确,DataStore将包含一个名为tests的NSSet属性(可能),Test将包含一个名为dataStore的DataStore属性(可能)。

您可以设置与这些属性的关系,并且可以以任何方式完成。你可以说:

DataStore *dataStore = // get instance of DataStore 
Test *test = // get instance of Test 

// Possibility one - add Test to DataStore 
[dataStore addTestsObject:test]; 

// Possibility two - add DataStore to Test 
[test setDataStore:dataStore]; 

// ... or you can use dot notation 
test.dataStore = dataStore; 
+0

这听起来更像它,其他方式(每个测试可以是许多数据存储对象的一部分,但每个数据存储对象只能有一个测试对象)。在生成的测试类中,我有一个方法' - (void)addDataStore:(NSSet *)value; (我假设你在说什么),但在我的数据存储类中,我没有任何东西。如果你有一个测试属性,有没有我可能遗漏的设置,会给我'setTest:'方法谢谢 – Darc 2011-06-13 07:51:03

+0

setTest:由框架给出。它基本上与说dataStore.test = //任何;;相同。您不需要显式声明该方法。这就是@dynamic为你做的。 – 2011-06-13 07:56:19

+0

没关系,它的晚了,我没有正确阅读你的答案,现在一切都好了,谢谢 – Darc 2011-06-13 07:56:35

1

假设有一个一对多的关系称为drivingConditionstestdatastore,然后-addDrivingConditionsObject:是正确的存取名称。访问者需要基于关系名称而不是被添加的对象的类型来命名,因为可能容易与相同类型的对象有几种不同的关系。任何时候都是这样,使用对象类型会产生歧义。

+0

所以我会搜索所有的测试对象,以找到我想要添加为数据存储的一部分,然后将数据存储对象添加到此? – Darc 2011-06-13 07:15:05