Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift3 在下一次应用程序运行时从错误线程访问的领域_Swift3_Realm - Fatal编程技术网

Swift3 在下一次应用程序运行时从错误线程访问的领域

Swift3 在下一次应用程序运行时从错误线程访问的领域,swift3,realm,Swift3,Realm,因此,我们有一个应用程序,用户需要登录。在登录期间,数据从internet下载并创建到领域数据库中 如果该应用程序已关闭并重新打开,我们希望该应用程序保留已登录的用户,这样他们就不需要再次重新登录。在第一次用户登录期间,一切正常。当应用程序关闭并重新打开时,领域数据库抛出一个错误“从错误线程访问” 我不能提供很多代码,因为我不知道问题出在哪里。我想知道是否再次运行应用程序是在不同的线程比以前?如果是这样的话,那么如何在新线程中访问从先前线程创建的数据而不遇到上述错误呢 任何帮助都将不胜感激。。。

因此,我们有一个应用程序,用户需要登录。在登录期间,数据从internet下载并创建到领域数据库中

如果该应用程序已关闭并重新打开,我们希望该应用程序保留已登录的用户,这样他们就不需要再次重新登录。在第一次用户登录期间,一切正常。当应用程序关闭并重新打开时,领域数据库抛出一个错误“从错误线程访问”

我不能提供很多代码,因为我不知道问题出在哪里。我想知道是否再次运行应用程序是在不同的线程比以前?如果是这样的话,那么如何在新线程中访问从先前线程创建的数据而不遇到上述错误呢


任何帮助都将不胜感激。。。提前感谢

正如您遇到的那样,您无法从与域打开线程不同的线程访问域。但是,可以在不同的线程上打开同一领域的多个实例(或者在需要时打开同一线程)。打开一个领域并不是一个昂贵的操作,所以在打开领域时没有性能问题

我猜你是在后台线程上下载数据的。我还猜测,该领域首先是在对该网络请求的回调中打开的。这意味着域在回调所在的线程上打开。如果在重新打开应用程序时尝试在主线程上访问该领域(或任何其他与以前线程不同的线程),则会出现错误

最佳实践是,每当您知道自己在不同的线程上工作时,就打开一个新领域。正如我提到的,这不是一个昂贵的操作,应该自由使用

如果您有某种类型的
RealmService
realmanager
作为一个单身汉,我建议您不要使用它。如果域在主线程上初始化,则无法从后台线程向其添加记录


简而言之:每当您在回调中对域执行操作时,除非您100%确定自己将在打开域时所在的同一线程上,否则请创建一个新的域实例并使用该实例执行操作。

正如您所遇到的,您无法从打开域的线程以外的其他线程访问域。但是,可以在不同的线程上打开同一领域的多个实例(或者在需要时打开同一线程)。打开一个领域并不是一个昂贵的操作,所以在打开领域时没有性能问题

我猜你是在后台线程上下载数据的。我还猜测,该领域首先是在对该网络请求的回调中打开的。这意味着域在回调所在的线程上打开。如果在重新打开应用程序时尝试在主线程上访问该领域(或任何其他与以前线程不同的线程),则会出现错误

最佳实践是,每当您知道自己在不同的线程上工作时,就打开一个新领域。正如我提到的,这不是一个昂贵的操作,应该自由使用

如果您有某种类型的
RealmService
realmanager
作为一个单身汉,我建议您不要使用它。如果域在主线程上初始化,则无法从后台线程向其添加记录


简而言之:每当您在回调中对某个领域执行操作时,除非您100%确定自己将与在上打开某个领域时处于同一线程,否则请创建一个新的领域实例并使用该实例执行操作。

很好的解释!谢谢你!但是我们已经找出了错误,这是一个逻辑错误,导致领域抛出错误。在第一次登录时,我们使用的是一个静态对象,它不受领域管理。在自动登录时,我们从数据库中获取数据,然后是一个领域对象。因此,对该对象的任何更改都会抛出一个错误。我们可以通过创建领域对象的“独立”副本来修复它。很好的解释!谢谢你!但是我们已经找出了错误,这是一个逻辑错误,导致领域抛出错误。在第一次登录时,我们使用的是一个静态对象,它不受领域管理。在自动登录时,我们从数据库中获取数据,然后是一个领域对象。因此,对该对象的任何更改都会抛出一个错误。我们可以通过创建领域对象的“独立”副本来修复它。