【问题标题】:Core data relationships on IOSIOS上的核心数据关系
【发布时间】:2011-09-13 17:18:16
【问题描述】:

我刚刚重新设计了我的核心数据文件以利用关系,但我无法完全理解我如何使用这个新模型。

我有一个名为 data store 的实体,它与另一个名为 test 的实体具有一对一的关系(test 与 datastore 具有多对一的关系)。我试图弄清楚如何存储已选择的测试实体中的哪些记录。根据我从护目镜中发现的内容,我应该写 [test addDrivingConditionsObject:datastore] 这是我应该怎么做还是有办法说 [datastore addTestObject:test] 我更喜欢。 谢谢

【问题讨论】:

    标签: iphone objective-c core-data


    【解决方案1】:

    假设从testdatastore 存在称为drivingConditions 的一对多关系,那么-addDrivingConditionsObject: 是正确的访问器名称。访问器需要根据关系名称而不是要添加的对象的类型来命名,因为同一类型的对象很容易有多个不同的关系。在任何情况下,使用对象类型都会产生歧义。

    【讨论】:

    • 那么我是否会搜索所有测试对象以找到我想要添加为数据存储的一部分,然后将数据存储对象添加到此?
    【解决方案2】:

    首先,说从 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;
    

    【讨论】:

    • 这听起来更像是它,相反(每个测试可以是许多数据存储对象的一部分,但每个数据存储对象只能有一个测试对象)。在生成的测试类中,我有一个方法- (void)addDataStore:(NSSet *)value; (我假设这就是你在说的)但在我的数据存储类中我没有任何东西。有没有我可能遗漏的设置可以给我setTest: 方法谢谢
    • setTest: 如果您有测试属性,则由框架给出。它本质上与说 dataStore.test = //whatever; 相同。您不需要显式声明该方法。这就是@dynamic 正在为你做的事情。
    • 没关系,已经晚了,我没有正确阅读您的答案,现在一切都很好,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多