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

最后发布: 2015-08-11 15:55:42


问题

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

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

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

然而, 未经加载的对象是有问题的。 当我在后台创建一个具有相同primaryKey的新对象时(我想它应该被视为同一个对象,因为它具有相同的primaryKey )并尝试在主线程上获取它(没有持久的write更改,因为我没有想要在存储中),我似乎得到了旧的对象。

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

1)坚持所有对象(这是不合需要的,否则不必要)

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

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

还有更好的解决方案吗?

Offtopic:我没有尝试Android的Realm,情况有什么好转吗?

ios swift realm
回答

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


回答

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

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

你写:

我似乎得到了旧的对象。

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