Ios Swift中后台线程上的域状态不一致

Ios Swift中后台线程上的域状态不一致,ios,swift,realm,ios-multithreading,Ios,Swift,Realm,Ios Multithreading,尽管使用autoreleasepool并在每次访问领域时实例化一个新的领域实例,但我有时会得到不一致的状态 在以下(人为)示例中,数据库中只存储了一个MyObject。删除之后,第二个查询仍然可以看到该实例。有人能解释为什么会发生这种情况吗?它在大多数情况下都有效,但在极少数情况下,我会出现不一致的状态。有时在两个单独的线程上访问领域时会发生这种情况,但有时甚至在同一个线程上也会发生这种情况 我知道我可以在第二次查询之前调用realm.refresh()(我还没有测试过),但我的问题是为什么我需

尽管使用autoreleasepool并在每次访问领域时实例化一个新的领域实例,但我有时会得到不一致的状态

在以下(人为)示例中,数据库中只存储了一个
MyObject
。删除之后,第二个查询仍然可以看到该实例。有人能解释为什么会发生这种情况吗?它在大多数情况下都有效,但在极少数情况下,我会出现不一致的状态。有时在两个单独的线程上访问领域时会发生这种情况,但有时甚至在同一个线程上也会发生这种情况

我知道我可以在第二次查询之前调用
realm.refresh()
(我还没有测试过),但我的问题是为什么我需要这样做?每个函数都有自己的领域实例,并根据docs的建议包装在autoreleasepool中。我是不是误解了什么

func start(){
DispatchQueue.global().async{
更新1()
update2()
}
}
func update1(){
自动释放池{
让realm=try!realm()
让object=realm.objects(MyObject.self)。首先!//这里需要对象
试试看!写吧{
realm.delete(对象)
}
}
}
func update2(){
自动释放池{
让realm=try!realm()
如果让object=realm.objects(MyObject.self){
fatalError(“此处不需要对象”)
}
}
}

提前谢谢

问题很清楚,布局也很好。但是,我将您的代码复制并粘贴到一个运行1000次的循环中。在1000次正确操作中,有1000次正确操作;update2从不读取在update1中删除的MyObject。要么我是“幸运的”,要么它表明存在其他一些影响Realm或MyObject的代码。谢谢你的夸奖:)我认为它应该可以工作,所以我不确定到底发生了什么。
MyObject
对象有两个子领域对象。由于Realm不支持级联删除,所以我自己实现了它,所以首先删除子对象,然后删除父对象。但在查询时,子对象仍然被删除,但父对象仍然存在?!包含实际的领域模型,然后包含用于删除它们的实际代码可能会有所帮助。尽可能缩小这些模型的规模,使其成为一个MCVE——非常清晰的问题,并且布局良好。但是,我将您的代码复制并粘贴到一个运行1000次的循环中。在1000次正确操作中,有1000次正确操作;update2从不读取在update1中删除的MyObject。要么我是“幸运的”,要么它表明存在其他一些影响Realm或MyObject的代码。谢谢你的夸奖:)我认为它应该可以工作,所以我不确定到底发生了什么。
MyObject
对象有两个子领域对象。由于Realm不支持级联删除,所以我自己实现了它,所以首先删除子对象,然后删除父对象。但在查询时,子对象仍然被删除,但父对象仍然存在?!包含实际的领域模型,然后包含用于删除它们的实际代码可能会有所帮助。尽可能缩小这些模型,使其成为MCVE-