我有一个模型,我需要坚持一些实例。只有一些,而不是全部,因为坚持所有实例都是浪费。该模型的primaryKey
类型为Int
我需要能够将所有对象从后台传递到主线程,因为Realm对象只能由创建它们的线程使用。当前版本的Realm Swift(0.94)似乎不支持将对象直接交给另一个线程。
对于持久对象(使用write
保存到存储的对象)这不是问题,我可以通过primaryKey
在另一个线程上获取对象。
未加载的对象存在问题。当我在后台创建一个具有相同primaryKey
的新对象时(我认为它应该被视为同一个对象,因为它具有相同的primaryKey
)并尝试在主线程上获取它(没有持久化)由于我不想在存储空间中使用write
进行更改,因此我似乎得到了旧对象。
我看到以下解决此问题的方法:
1)坚持所有对象(这是不受欢迎的,否则是不必要的)
2)为我想要保留的对象保留单独的模型(导致代码重复)。
3)使用init(value: AnyObject)
初始化程序,它从Dictionary<String, AnyObject>
创建未加载的对象(可能需要手动将对象属性复制到字典中,繁琐且可能容易出错)
有更好的解决方案吗?
Offtopic:我还没有尝试过面向Android的Realm,情况会更好吗?
答案 0 :(得分:6)
您可以随意在线程之间传递未经存在的对象 - 只有持久化对象无法在不同线程之间切换。
答案 1 :(得分:0)
我认为您的问题是您要创建两个想要成为同一个对象的对象,系统无法知道您想要哪个对象。
解决方案非常简单:仅在检查其唯一属性不存在后才创建新对象。这应该与持久和非持久对象同样有效。显然,您需要一个中心的,线程安全的内存存储库,您可以在其中创建新对象。
你写道:
我似乎得到了旧物件。
如果您之前已经检查过,则不应该有任何旧对象。