Swift - 尝试将领域对象列表(已保存到领域)转换为结果时出错
Swift - Error in when trying to convert a list of Realm objects (already saved to a realm) into results
我在尝试使用 RealmSwift
将 List<T>
转换为 Results<T>
时遇到问题。我有一个函数可以通过多个过滤器运行一组结果,并 returns 过滤结果。但是,此过程中的一个步骤需要进行一些计算,并且无法通过应用 NSPredicate
过滤器来完成。因此,我创建了一个列表,并将符合条件的结果添加到列表中。由于我需要 return 一组结果,因此我将 "TRUEPREDICATE" 过滤器应用于列表。但是,我最终因错误消息 "This method may only be called on RLMArray
instances retrieved from an RLMRealm
."
而崩溃
我看到这个问题出现在尚未添加到 Realm
的对象列表中,但这些是先前查询的结果,因此肯定已经保存到数据库中。
我的代码看起来像这样:
var results:Results<Object> = resultsOfSomeQuery
let list = List<Object>()
for result in results {
if result.matchesSomeCriteria {
list.append(result)
}
}
results = list.filter("TRUEPREDICATE")
如果有人能澄清这里发生的事情,我们将不胜感激。
你想要达到的目标是不可能的。
由于 Results
是自动更新的,它只能包含来自 Realm
的托管对象。这就是为什么 Realm 的 filter
也只能在托管集合上调用的原因。您不能在您手动创建的 List
上使用 Realm 的 filter
,而不将其保存在 Realm 中。
如果您需要执行的过滤确实无法使用 NSPredicate
s 完成,那么您需要求助于使用非更新集合。
我在尝试使用 RealmSwift
将 List<T>
转换为 Results<T>
时遇到问题。我有一个函数可以通过多个过滤器运行一组结果,并 returns 过滤结果。但是,此过程中的一个步骤需要进行一些计算,并且无法通过应用 NSPredicate
过滤器来完成。因此,我创建了一个列表,并将符合条件的结果添加到列表中。由于我需要 return 一组结果,因此我将 "TRUEPREDICATE" 过滤器应用于列表。但是,我最终因错误消息 "This method may only be called on RLMArray
instances retrieved from an RLMRealm
."
我看到这个问题出现在尚未添加到 Realm
的对象列表中,但这些是先前查询的结果,因此肯定已经保存到数据库中。
我的代码看起来像这样:
var results:Results<Object> = resultsOfSomeQuery
let list = List<Object>()
for result in results {
if result.matchesSomeCriteria {
list.append(result)
}
}
results = list.filter("TRUEPREDICATE")
如果有人能澄清这里发生的事情,我们将不胜感激。
你想要达到的目标是不可能的。
由于 Results
是自动更新的,它只能包含来自 Realm
的托管对象。这就是为什么 Realm 的 filter
也只能在托管集合上调用的原因。您不能在您手动创建的 List
上使用 Realm 的 filter
,而不将其保存在 Realm 中。
如果您需要执行的过滤确实无法使用 NSPredicate
s 完成,那么您需要求助于使用非更新集合。