2
class Book: Object {
// (…)
var readingSessions: [ReadingSession] {
return linkingObjects(ReadingSession.self, forProperty: "book")
}
}
class ReadingSession: Object {
// (…)
var book: Book?
var aComputedProperty: Int {
print(self) // Prints ReadingSession { book = Book { (…) } (…) }
print(self.book) // Prints nil
// (…)
}
}
代码几乎说明了一切。如果我从我的计算属性中打印self
,它会在我期望的其他属性中打印相关对象。如果我只是试图获得该对象,但它返回nil
。这是否应该发生?难道我做错了什么?领域关系返回零时,它不应该
由于提前,
丹尼尔
编辑:看来问题实际上与计算性能。只是从普通的视图控制器调用这个问题给我带来了同样的问题:
let session = ReadingSession()
// (…)
print(session) // This returns every property, including the Book
print(session.book) // This returns nil
虽然这并不总是发生。在我的代码的某些部分,我做了同样的事情,它按预期工作,在其他部分发生。所以我想我只是在某个地方犯了一个愚蠢的错误,但我不知道是什么导致了这个。
let realm = try! Realm()
let sessions = realm.objects(ReadingSession).filter("book = %@", user.selectedBook!).sorted("date")
let session = sessions[indexPath.row]
print(session.book) // prints nil
session.book = user.selectedBook!
print(session.book) // prints the correct book
我不明白!我正在根据Book
过滤会话。当我打印过滤的会话书时,不应该返回我用来过滤它的书吗?但是,只有当我将它的书属性重新设置为同一本书时才有效!
我以为我已经当我定义'无功书的关系:在我的阅读会话书',然后我用'linkingObjects'部分来定义反向关系。除此之外,我认为没有必要为list添加一个list属性。你说我除了用'linkingObjects'定义的反向关系之外还应该有另外一个阅读会话属性?另外,我的问题不是查询某个书本电话的所有会话,而是已经有效。有时无法正常工作的是从会话中查询一本书。 – dbmrq
但是,正确地将书籍添加到会话中,因为当我打印(会话)时,我得到了正确的书籍。问题是当我打印(session.book)时,有时候我会得到零。我以为我甚至不需要从'Book'到'ReadingSession'的相反关系来做到这一点。我的每个'ReadingSessions'都有一个'Book',我只是想得到它。 – dbmrq
啊,好的。然后我误解了你的问题。一个问题:'user.selectedBook'是什么类型?那是一个'Book'对象吗? – joern