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.
如果之前检查过,应该没有旧对象。
您可以随意在线程之间传递非持久化对象——只有持久化对象还不能在不同线程之间传递。
我有一个模型,我需要保留其中的一些实例。只有一些,而不是全部,因为持久化所有实例会很浪费。该模型具有 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.
如果之前检查过,应该没有旧对象。
您可以随意在线程之间传递非持久化对象——只有持久化对象还不能在不同线程之间传递。