基于同级一对多关系属性的所有对象的CoreData NSFetchedResultsController

时间:2018-08-28 13:24:57

标签: ios swift core-data one-to-many nsfetchedresultscontroller

我有一个包含Category,Status和Item实体的模型(由于某种原因,它很大):

Model Shot

我想维护所有具有至少一个状态为“打开”或“购买”的商品的Category对象的NSFetchedResultsController。我进行了广泛的搜索,可以找到大量的CoreData对多关系线程,但是似乎找不到这样的东西。

我需要断言干预-我的当前抛出异常是因为我试图非法使用一对多关系:

SELECT dbo.Users.UserId AS 'userId', 
       dbo.Users.UserName AS 'firstName', 
       dbo.Users.Surname AS 'surname', 
       dbo.Users.Photograph AS 'photograph', 
       dbo.Users.JobTitle AS 'jobTitle', 
       dbo.Users.EmailAddress AS 'emailAddress', 
       dbo.Users.Inactive AS 'inactive', 
       COUNT(dbo.UserGroups.userId) AS 'teams'
 FROM dbo.Users, 
       dbo.UserGroups
 WHERE dbo.Users.UserId = 27 
       AND dbo.UserGroups.UserId = dbo.Users.UserId
 GROUP BY dbo.Users.UserId, 
       dbo.Users.UserName, 
       dbo.Users.Surname, 
       dbo.Users.Photograph, 
       dbo.Users.JobTitle, 
       dbo.Users.EmailAddress, 
       dbo.Users.Inactive

这是我现在的代码(错误的代码,糟糕的!):

'NSInvalidArgumentException', reason: 'to-many key not allowed here'

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在谓词中使用ANY关键字(如注释中所述)将为您提供一个有效的FetchRequest,该关键字将在最初获得正确的结果。

然而,FetchedResultsController将仅监视Category对象,因此不会注意到Item对象中的任何变化。

解决方案是仅在Category对象中保留一个额外字段以帮助FRC。如果有任何物品是未清的或已购买的,则设置一个标志,FRC 可以监视更改。