2011-06-13 100 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