领域:获取 - [__ NSArrayM UTF8String]:发送到实例的无法识别的选择器

时间:2016-05-13 05:14:36

标签: ios realm realm-migration

我在应用升级方案中遇到崩溃。它给出了以下错误和警告。但是这个问题只有在我安装了AppStore版本时才会发生,最重要的是我安装了新的testflight版本。 如果我在AppStore构建上安装开发人员构建,那么它可以正常工作。

错误:

  

[__ NSArrayM UTF8String]:无法识别的选择器发送到实例

警告:在写入事务期间释放了RLMRealm实例,并且已回滚所有挂起的更改。确保在写入事务期间保留对RLMRealm的引用。

当您点按应用程序图标时,它会立即崩溃,所以,我没有任何堆栈跟踪。

领域版本:0.96.3& Xcode版本:7.3

以下是我的迁移代码。

RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
    config.schemaVersion = 3;

    if (oldSchemaVersion < 2)
    {
        [migration enumerateObjects:DB_Class1.className
                              block:^(RLMObject *oldObject, RLMObject *newObject) {
                                  newObject[@"thisIsArray_1"] = nil;
                              }];
        [migration enumerateObjects:DB_Class2.className
                              block:^(RLMObject *oldObject, RLMObject *newObject) {
                                  newObject[@"thisIsInt_1"] = 0;
                                  newObject[@"thisIsInt_2"] = 0;
                                  newObject[@"thisIsInt_3"] = 0;
                              }];            
    }

以上所有newObjects仅在此版本中添加。

更新1:我可以看到deleteRealmIfMigrationNeeded的android。 iOS中有任何eqvivalent吗?我只找到了deleteAllObjects。如果是这样,我可以简单地删除旧的领域数据并保存新的领域数据。

感谢。

1 个答案:

答案 0 :(得分:1)

Realm Cocoa在版本0.102.0中添加了deleteRealmIfMigrationNeeded选项(在RLMRealmConfiguration上)。这应该可以让您回避迁移问题。请参阅更改说明here