Realm Swift:在线程之间传递未经存在的对象

时间:2015-08-11 15:55:42

标签: ios swift realm

我有一个模型,我需要坚持一些实例。只有一些,而不是全部,因为坚持所有实例都是浪费。该模型的primaryKey类型为Int

我需要能够将所有对象从后台传递到主线程,因为Realm对象只能由创建它们的线程使用。当前版本的Realm Swift(0.94)似乎不支持将对象直接交给另一个线程。

对于持久对象(使用write保存到存储的对象)这不是问题,我可以通过primaryKey在另一个线程上获取对象。

然而,

未加载的对象存在问题。当我在后台创建一个具有相同primaryKey的新对象时(我认为它应该被视为同一个对象,因为它具有相同的primaryKey)并尝试在主线程上获取它(没有持久化)由于我不想在存储空间中使用write进行更改,因此我似乎得到了旧对象。

我看到以下解决此问题的方法:

1)坚持所有对象(这是不受欢迎的,否则是不必要的)

2)为我想要保留的对象保留单独的模型(导致代码重复)。

3)使用init(value: AnyObject)初始化程序,它从Dictionary<String, AnyObject>创建未加载的对象(可能需要手动将对象属性复制到字典中,繁琐且可能容易出错)

有更好的解决方案吗?

Offtopic:我还没有尝试过面向Android的Realm,情况会更好吗?

2 个答案:

答案 0 :(得分:6)

您可以随意在线程之间传递未经存在的对象 - 只有持久化对象无法在不同线程之间切换。

答案 1 :(得分:0)

我认为您的问题是您要创建两个想要成为同一个对象的对象,系统无法知道您想要哪个对象。

解决方案非常简单:仅在检查其唯一属性不存在后才创建新对象。这应该与持久和非持久对象同样有效。显然,您需要一个中心的,线程安全的内存存储库,您可以在其中创建新对象。

你写道:

  

我似乎得到了旧物件。

如果您之前已经检查过,则不应该有任何旧对象。