Realm.io。如何刷新替换的领域?
Realm.io. How to refresh replaced realm?
我刚刚在基于 Realm 的 iOS 应用程序中创建了一个 dropBox backup/restore。我正在用导入的 defaultRealm 替换当前的 defaultRealm。如果我终止该应用程序并重新启动它,一切都会按预期进行,我会看到我的新导入数据,但如果不重新启动该应用程序我就无法让它出现(即使我检查过旧领域文件已被删除并重新创建)。
我已尝试在 RLMRealmConfiguration 重新分配领域路径并更新架构版本以执行迁移,但没有任何变化。有什么方法可以强制领域刷新数据吗?
可靠地切换 Realm 文件的唯一方法是确保您的应用在任何线程上都没有对任何 RLMRealm
的强引用。
如果你能保证这一点,那么此时如果你删除底层Realm文件(包括关联文件,如锁文件)并将新文件保存到该路径下,你就可以调用[RLMRealm defaultRealm]
并检索新数据。
下面是删除所有相关领域文件的一些代码:
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];
}
}
这个问题跟踪添加一种安全的方法来删除 Realm 文件到 API:Issue #2422
我刚刚在基于 Realm 的 iOS 应用程序中创建了一个 dropBox backup/restore。我正在用导入的 defaultRealm 替换当前的 defaultRealm。如果我终止该应用程序并重新启动它,一切都会按预期进行,我会看到我的新导入数据,但如果不重新启动该应用程序我就无法让它出现(即使我检查过旧领域文件已被删除并重新创建)。
我已尝试在 RLMRealmConfiguration 重新分配领域路径并更新架构版本以执行迁移,但没有任何变化。有什么方法可以强制领域刷新数据吗?
可靠地切换 Realm 文件的唯一方法是确保您的应用在任何线程上都没有对任何 RLMRealm
的强引用。
如果你能保证这一点,那么此时如果你删除底层Realm文件(包括关联文件,如锁文件)并将新文件保存到该路径下,你就可以调用[RLMRealm defaultRealm]
并检索新数据。
下面是删除所有相关领域文件的一些代码:
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];
}
}
这个问题跟踪添加一种安全的方法来删除 Realm 文件到 API:Issue #2422