我有一个使用Realm.io的应用程序,在注销时,我们完全销毁用户构建的域缓存,这样当新用户登录时,我们可以为下一个用户重新创建缓存文件。
删除所有对象不是一个选项,因为领域文件是使用用户密码的哈希加密的,所以它必须是一个新的领域(AFAIK)。
目前我正在删除Realm文件:
NSString *realmFile = [[DCMCacheManager documentsDirectoryPath] stringByAppendingPathComponent:@"myApp.realm"];
NSFileManager *localFileManager = [NSFileManager new];
[localFileManager removeItemAtPath:realmFile error:&error];
使用以下方法恢复它:
RLMRealm * realm = [RLMRealm realmWithConfiguration:config error:&error];
创建代码第一次运行时,创建的域文件没有任何问题。当我尝试在删除后重新创建它时,应用程序似乎返回了realm文件的内部缓存版本,因此不会为我创建myApp.realm文件。
当我删除它时,有关如何确保领域绝对死亡的任何建议吗?
答案 0 :(得分:1)
在删除Realm文件之前,您需要确保已取消分配使用该文件的所有Realm对象。在可能的情况下,最简单的方法是在完全打开Realm文件之前简单地执行删除操作,或者只需要非常短暂地打开Realm,就可以在显式autoreleasepool
内执行此操作。
如果用户可以在应用运行时注销并登录其他帐户,那么这不是一个选项。相反,我建议的是为每个用户使用不同的文件路径(例如NSString *realmFile = [[DCMCacheManager documentsDirectoryPath] stringByAppendingPathComponent:userName];
而不是@" myapp.realm")。这将完全回避问题,并使用户之间来回切换更快。如果您的Realm文件占用了大量的空间,您可以清除除应用程序启动时当前活动用户以外的所有文件。
另外,如果您的Realm文件纯粹只是一个缓存,那么Apple希望您将该文件放在Caches目录而不是Documents目录中,并且它们偶尔会拒绝应用程序而不执行此操作。