這不是一個問題,而只是一個關於如何在後臺線程中發生更改時調度域收集更改通知的常見問題。領域刪除對象的策略和通知
因此,有一個場景(在領域可可):
Foo: RLMObject
類的對象RLMResults
是默認領域牽強。然後該列表被轉換爲陣列[Foo]
和在視圖控制器保存爲變量(無關緊要)- 表顯示的foo該對象列表
- 某些對象上後臺線程
- 用戶滾動表視圖,小區中刪除被重用,索引x處的數組對象被訪問,但它在後臺線程上被刪除併發生崩潰,因爲
object was deleted or invalidated
。如預期。
爲了解決我們可以使用收集通知並在發生更改時刷新列表。由於我試圖按預期工作,但是在主線程發出通知之前,不可能發出單元重用的調度,以便單元設置方法將使用失效的對象?
試圖儘可能詳細地解釋問題。
主要是關於數據與服務器同步(不使用Realm的移動平臺)時發生在後臺線程和視圖上的情況,無論它們是表格單元格還是任何其他視圖,都持有對could-被刪除的對象。在嘗試對對象執行某些操作時檢查對象是否失效是一種很好的做法,因爲它可能會在後臺線程上被刪除。
我看到一對夫婦的解決方案:
- 每次訪問
RLMObject
子類對象檢查的參考,如果它不被無效 - 包裝對象到視圖模型(離開自我更新的所有好的部分模型特徵),然後在嘗試更改模型時留下另外兩種解決方案:
- 將對象ID保存在視圖模型中,以便在嘗試更改時可以再次獲取對象
- 必須具有相同的問題第一點
什麼是這個建議的對象本身的引用?
編輯:
使用Results
和List
有時不是真的有可能,如果對象Foo
是複雜的。例如,當打開Foo表視圖的詳細信息屏幕時,許多不同的單元訪問Foo
類的對象的屬性。所以關於刪除對象屏幕的通知可能會被駁回,但作爲用戶滾動不可能該單元可能訪問無效的對象?
也許問題只是愚蠢的,在設計有關加薪的條件,但我很好奇,如果有可能,它能將在主線程會發生這樣的:object becomes invalidated (I don't know how that happens in realm internally>
然後some code which access that object
然後notification about invalidated object
感謝您的回答。是的,我知道Realm如何使用mmap,但有時表視圖顯示單個對象,請參閱編輯該問題。 –
我讀過你的編輯,而且我仍然不明白爲什麼你喜歡複製'List'中的所有數據,或者'Foo'很複雜時,'Results'有幫助。 – jpsim
我不是在談論這個列表,我正在談論表格視圖中的一個'Foo'對象顯示。就像表格源文件引用單個'Foo'對象並按行顯示它的細節一樣。 –