Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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
Ios 解析对象时删除领域数据库_Ios_Realm - Fatal编程技术网

Ios 解析对象时删除领域数据库

Ios 解析对象时删除领域数据库,ios,realm,Ios,Realm,我正在开发一个使用领域作为数据库的应用程序。用户可以随时注销,这将删除域中的所有对象 但由于我的应用程序使用网络,我可能同时在解析对象,结果崩溃了 *** Terminating app due to uncaught exception 'RLMException', reason: 'Object has been deleted or invalidated.' 这是我的注销功能: - (void)logout { RLMRealm *realm = [RLMRealm defa

我正在开发一个使用领域作为数据库的应用程序。用户可以随时注销,这将删除域中的所有对象

但由于我的应用程序使用网络,我可能同时在解析对象,结果崩溃了

*** Terminating app due to uncaught exception 'RLMException', reason: 'Object has been deleted or invalidated.'
这是我的注销功能:

- (void)logout {
    RLMRealm *realm = [RLMRealm defaultRealm];

    [realm beginWriteTransaction];
    [realm deleteAllObjects];
    [realm commitWriteTransaction];

    [self showLoginScreen];
}

正确的处理方法是什么?我想删除注销时存储的所有数据。

您可以通过属性
invalidated
检查对象是否仍然存在。作为锁定机制,您可以使用写事务本身,因为它们与领域是独占的。您在一个时间点上只输入一个写事务。

我没有使用Realm,但只要想一想,您就可以删除后台线程中的所有对象,并在解析代码和对象删除代码周围放置
@synchronized
块(当然,在同一个互斥体上同步)。或者,您可以复制从Realm获得的对象,这样您就不会解析“活动”副本,尽管我不知道Realm是否支持这一点。最后,您可以尝试检查是否删除了每个对象,尽管这听起来有点骇人听闻。