为什么我不能在计算 属性 的 NSManagedObject 子类中使用关系? (核心数据,swift)

Why can't I use a relationship in a NSManagedObject subclass computed property? (CoreData, swift)

我正在使用 CoreData 并且我有一个 Book 实体和一个 ReadingSession 实体。每本书都有很多阅读会话。

如果我将此计算 属性 添加到书本 class,它会起作用:

var sessions: [ReadingSession] {
    let request = NSFetchRequest(entityName: "ReadingSession")
    let predicate = NSPredicate(format: "book = %@", self)
    request.predicate = predicate
    return try! DataController.sharedInstance.managedObjectContext.executeFetchRequest(request) as! [ReadingSession]
}

但是如果我添加这个,它不会:

var sessions: [ReadingSession] {
    return readingSession?.allObjects as! [ReadingSession]
}

最后一个示例有时 returns 正确的数组,有时只是 returns 一个空数组。 我对计算属性内的其他关系尝试了同样的事情,结果是一样的。

这是为什么?我有理由不尝试这样做吗?我的第一个示例是有效的解决方法,还是会在以后给我带来问题?我是否应该为此放弃使用计算属性并在需要时重复代码?

提前致谢!

丹尼尔

回答我自己的问题,正如 Wain 在评论中指出的那样,我 应该 能够在计算属性中使用关系,而我的问题实际上出在其他地方。

如果您对详细信息感兴趣,请阅读下一段,但是,长话短说,如果您遇到同样的问题,您应该检查您的人际关系并确保将它们正确设置为“一对一”或“一对一”太多。还要检查您是否在正确的位置设置了所有属性,并且仅在必要时设置。

我编辑了我的问题以删除许多不必要的细节并使其更具可读性,但最终问题是我有一个带有 selectedBook 属性 的用户实体,它是在用户选择排。我已将其设置为一对多关系,但用户一次只能选择一本书籍,因此它应该是一对一关系。此外,当我创建一本书时,我将 user.selectedBook 设置为它,但是 selectedBook 属性 应该只在用户从一行中选择一本书时设置。所以我正在设置并尝试在所有正确的时间访问我的一些关系。例如,我试图在用户甚至选择一行之前访问 user.selectedBook,然后它显然返回了 nil,这弄乱了许多其他计算属性。现在,我修复了所有这些问题,并且能够毫无问题地从计算属性中访问我的所有关系。