2011-04-14 62 views

回答

1

嗯,我不知道我理解你的問題,但我會嘗試在簡單的領域模型的上下文中回答。

比方說,你有一個Person類和一個Computer類,都延伸NSManagedObjectPerson通過單向關係鏈接到Computer,名爲computers的NSSet。

這將允許你在代碼中說:

Person *person = // ... (loaded from database) 
NSSet *computers = person.computers; 
for (Computer *computer : computers) { 
    // do something fun 
} 

然而,因爲它是一個單向的關係,你會能夠做到這一點:

Computer *computer = // loaded from DB 
Person *person = computer.person; // This line won't work 

因此,因爲它不起作用 - 沒有向後關係 - 獲取相關Person類的唯一方法是構建一個Fetch請求來查詢數據庫並查找將Computer作爲成員的Person實例。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSPredicate *predicate = // define your NSPredicate to find the Person object here 
[fetchRequest setPredicate:predicate]; 
NSError *error = nil; 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 
[fetchRequest release]; 

一般來說,這是煩人。因此,如果可能的話,雙向定義您的關係(例如反向)通常是一個好主意,這將使您能夠做到:

Person *person = computer.person; 
+0

這樣做很有意義。嘖嘖。 – 2011-04-14 07:14:55

+0

我仍然缺少一些東西。說我仍然想要有人來電腦單向關係。說出這樣做的方式,而不會讓猜測錯誤是將計算機定義爲關係而不是定義關係。因此,沒有人擁有電腦。我們沒有人與電腦的關係。我們已經把人與計算機之間的關係搞定了。所以你的謂詞不起作用。 – 2011-04-14 07:17:05

+0

提取關係是計算的 - 它們在物理上並不代表數據庫中保存的數據。它們對於排序結果和/或僅返回一個子集等事物很有用 - 例如,您可以從Person - > Computer獲取一個名爲'appleComputers'的獲取關係,該關係只返回這個人擁有的計算機和'where make =「Apple」'。 – asinesio 2011-04-14 17:31:58