ios - Realm.io。如何刷新替换的 Realm ?

标签 ios realm

我刚刚在基于 Realm 的 iOS 应用程序中创建了 dropBox 备份/恢复。我正在将当前的defaultRealm 替换为导入的defaultRealm。如果我终止应用程序并重新启动它,一切都会按预期工作,并且我会看到新导入的数据,但如果不重新启动应用程序,我就无法使其显示(即使我检查了旧 Realm 文件已被删除并重新创建)。

我尝试在 RLMRealmConfiguration 中重新分配 Realm 路径并更新架构版本以执行迁移,但没有任何变化。有没有办法强制 Realm 刷新数据?

最佳答案

可靠地切换 Realm 文件的唯一方法是确保您的应用在任何线程上都没有对任何 RLMRealm 的强引用。

如果你能保证这一点,那么此时如果你删除了底层的Realm文件(包括关联的文件,比如lock文件)并将新文件保存到该路径下,那么你就可以调用[RLMRealm defaultRealm] 并检索新数据。

以下是删除所有关联 Realm 文件的一些代码:

NSString *path = [RLMRealm defaultRealmPath];

NSString *fileName = path.lastPathComponent;

NSString *folderPath = [path stringByDeletingLastPathComponent];

NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:folderPath];

// Enumerate all the files in the folder containing the Realm file    
for (NSString *filePath in enumerator) {
    // Check to find all the associated Realm files
    if ([filePath containsString:fileName]) {
        NSString *fullPath = [folderPath stringByAppendingPathComponent:filePath];

        [[NSFileManager defaultManager] removeItemAtPath:fullPath error:nil];
    }
}

此问题跟踪在 API 中添加删除 Realm 文件的安全方法:Issue #2422

关于ios - Realm.io。如何刷新替换的 Realm ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32926955/

相关文章:

ios - 如何使用按钮管理 SWRevealViewController

html - 检查 NSString 是否是 html 字符串?

ios - 在同一中心位置缩放圆

ios - 向 Realm 结果数组添加通知

swift - 无法连接到 AWS EC2 上的 Realm 服务器

javascript - 如何在 react native Realm 中存储 [String] 或 [Int]

ios - UIBezierPath 与核心数据的持久性

ios - 用 TableViewController 中的日期选择器替换 iOS7 键盘

database - 如何使用 Realm 进行排序?

ios - 如何使用 cocoapod 包含 ios 应用程序和 watch 扩展的共享框架