Realm Swift: 在线程之间传递非持久化对象

Realm Swift: passing unpersisted objects between threads

我有一个模型,我需要保留其中的一些实例。只有一些,而不是全部,因为持久化所有实例会很浪费。该模型具有 primaryKey 类型 Int

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

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

然而,

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

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

1) 保留所有对象(这是不希望的,否则是不必要的)

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

3) 使用 init(value: AnyObject) 初始化器从 Dictionary<String, AnyObject> 创建非持久对象(可能需要手动将对象属性复制到字典,乏味且可能容易出错)

有没有更好的解决方案?

Offtopic:我还没有为 Android 尝试过 Realm,使用它情况会好些吗?

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

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

你写:

I seem to get the old object.

如果之前检查过,应该没有旧对象。

您可以随意在线程之间传递非持久化对象——只有持久化对象还不能在不同线程之间传递。