0

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

如果我将此计算属性添加到 Book 类,它可以工作:

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]
}

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

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

提前致谢!

丹尼尔

4

1 回答 1

1

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

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

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

于 2015-10-15T06:25:38.350 回答