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