ios - 使用多个 Realm 时,如何停止所有类出现在具有 0 个实例的所有 Realm 中?

标签 ios objective-c realm

例子:

2 个 Realm :Blue.realm、Red.realm

2 个 RLMObject 子类:BlueClass、RedClass。

我创建 BlueClass 实例并将其添加到 Blue.realm,我创建 RedClass 实例并将其添加到 Red.realm。

当我在 Realm Studio 中查看 Realm 及其内容时,我会看到:

Blue.realm

蓝色类(1)

红级 (0)

Red.realm

蓝色类(0)

红色类(1)

实例化的实例位于正确的 Realm ,但所有其他 Realm 类都添加到每个内容为 0 的 Realm 。

我确信某个地方一定有一个简单的修复方法,但我找不到它。

-(void)runRealmTests{

NSURL *defaultURL = [RLMRealmConfiguration defaultConfiguration].fileURL;
NSLog(@"FILEURL: %@",defaultURL);

NSError *error;
RLMRealmConfiguration *redConfig = [RLMRealmConfiguration defaultConfiguration];
redConfig.fileURL = [[defaultURL URLByDeletingLastPathComponent] URLByAppendingPathComponent:@"red.realm"];
RLMRealm *redRealm = [RLMRealm realmWithConfiguration:redConfig error:&error];
if (redRealm == nil) {
    NSLog(@"ERROR: %@",error.localizedDescription);
    return;
}
RedClass *red = [[RedClass alloc]init];
red.date = [NSDate date];
[redRealm beginWriteTransaction];
[redRealm addObject:red];
BOOL success = [redRealm commitWriteTransaction:&error];
if (!success) {
    NSLog(@"ERROR: %@",error.localizedDescription);
    return;
}

RLMRealmConfiguration *blueConfig = [RLMRealmConfiguration defaultConfiguration];
blueConfig.fileURL = [[defaultURL URLByDeletingLastPathComponent] URLByAppendingPathComponent:@"blue.realm"];
RLMRealm *blueRealm = [RLMRealm realmWithConfiguration:blueConfig error:&error];
if (blueRealm == nil) {
    NSLog(@"ERROR: %@",error.localizedDescription);
    return;
}
BlueClass *blue = [[BlueClass alloc]init];
blue.date = [NSDate date];
[blueRealm beginWriteTransaction];
[blueRealm addObject:blue];
success = [blueRealm commitWriteTransaction:&error];
if (!success) {
    NSLog(@"ERROR: %@",error.localizedDescription);
    return;
}

创建一个 RedClass 和一个 BlueClass 后的 red.realm red.realm after creating one RedClass and one BlueClass 创建一个 RedClass 和一个 BlueClass 后的 blue.realm blue.realm after creating one RedClass and one BlueClass

最佳答案

您需要创建两个单独的 Realm.Configuration 实例,并使用不同的配置创建两个 Realm,这些配置指定哪个 Object 子类应该属于哪个境界。默认配置包括您的两个 Realm 中的所有 Object 子类,因此会出现问题。

let blueConfig = Realm.Configuration(fileURL: blueURL, inMemoryIdentifier: "blueRealm", schemaVersion: 1, migrationBlock: nil, objectTypes: [BlueClass.self])
let redConfig = Realm.Configuration(fileURL: redURL, inMemoryIdentifier: "redRealm", schemaVersion: 1, migrationBlock: nil, objectTypes: [RedClass.self])    
do {
    let blueRealm = try Realm(configuration: blueConfig)
    let redRealm = try Realm(configuration: redConfig)
} catch {
    print(error)
    // handle the error correctly
}

关于ios - 使用多个 Realm 时,如何停止所有类出现在具有 0 个实例的所有 Realm 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50524635/

相关文章:

ios - 我可以检查 QuickLook 是否支持/打开给定文件吗?

ios - NSRangeException 使用-[ALAssetsGroup enumerateAssetsUsingBlock :]

objective-c - iOS 上的电话号码格式

ios - Realm 对象服务器 - 何时进行同步?

ios - RealmSwift 查询中带有内部对象引用的谓词问题

ios - iOS:setupSelector的setUserInteractionEnabled在64位上不起作用

ios - 如何使用facebook sdk使用自定义登录按钮登录facebook

objective-c - pathForAuxiliaryExecutable 有时怎么可能为零?

ios - "Use of unresolved identifier ' Realm '"

ios - Cordova ios平台版本太高