我有以下模型圖:核心數據跨越一對一的關係取請求謂詞濾波
+-----------+ +-----------+
| Container | | Group |
+-----------+ +-----------+
| groups |<-->>| container |
+-----------+ +-----------+
^ ^
| |
+-----------+ +-----------+ +-----------+ +---------+
| Owner | | ToyBox | | ToyType | | Item |
+-----------+ +-----------+ +-----------+ +---------+
| toyBox |<--->| owner | | items |<-->>| toyType |
+-----------+ +-----------+ +-----------+ +---------+
在一個UITableView我顯示一個列表中的項目的列表。在這種情況下,我只想顯示屬於特定所有者的物品。爲此,我將使用NSFetchedResultsController來顯示項目。這意味着我需要創建一個NSFetchRequest和一個適當的NSPredicate以提供給NSFetchedResultsController。
嘗試使用鍵路徑謂詞會導致由父實體造成的異常。這似乎是Apple的錯誤或不支持的決定。雷達已經提交。另外,我不希望扁平化這些實體。
所以這給我留下了試圖與SUBQUERY做到這一點()如下:
NSFetchRequest *itemsFetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Item"];
NSPredicate *itemsPredicate = [NSPredicate predicateWithFormat:@"SUBQUERY(toyItem, $g, SUBQUERY($g.container, $c, SUBQUERY($c.owner, $o, $o = %@)[email protected] > 0)[email protected] > 0)[email protected] > 0", ownerObject];
這將導致以下異常:
Can't have a non-relationship collection element in a subquerySUBQUERY($c.owner, $o, $o == <MLMOOwner: ...
我意識到,因爲這種關係是一個所有者和玩具箱之間沒有收集的集合,這就是問題所在。所以我的問題是:
1)有沒有辦法強制在子查詢中返回一對一關係的集合?
2)如果沒有另外一種方法去創建這個謂詞的獲取請求?
你甚至可以離開SELF。出。 –
@Scott好點。 – Caleb
@Caleb感謝您的反饋。我實現的第一件事是一個關鍵路徑方法,我也有一個例外。我只是試了一遍,下面回來:'keypath group.container。所有者未在實體中找到' –