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

Posted

技术标签:

【中文标题】领域:获取 -[__NSArrayM UTF8String]:无法识别的选择器发送到实例【英文标题】:Realm: Getting -[__NSArrayM UTF8String]: unrecognized selector sent to instance 【发布时间】:2016-05-13 05:14:36 【问题描述】:

我在应用升级场景中遇到崩溃。它给出以下错误和警告。但是这个问题只有在我安装了 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:我可以看到deleteRealmIfMigrationNeededfor androidios中是否有任何等价物?我只找到deleteAllObjects。如果是这样,那么我可以简单地删除我的旧领域数据并保存新的。

谢谢。

【问题讨论】:

看到这个对你有帮助的时候github.com/realm/realm-cocoa/issues/3422 @Anbu.Karthik,是的,基于我已经升级了境界,但无法解决 错误信息只是说UTF8String被发送到NSArray对象而不是预期的NSString对象 但它在开发人员构建中不会发生。对于开发人员和发布版本,我的数据保持不变,但这只发生在发布版本期间。 【参考方案1】:

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

【讨论】:

好的。会调查的。谢谢

以上是关于领域:获取 -[__NSArrayM UTF8String]:无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

NSArrayM objectAtIndex:索引 6 超出范围

NSArrayM insertObject:atIndex:]: 对象不能为 nil

NSArrayM replaceObjectAtIndex:withObject: 对象不能为 nil'

过滤领域对象以仅按属性获取一个(不同的)对象

如何从领域列表中获取要在 UITableview 中使用的值

如何在后台队列中获取对象的领域结果,然后在主线程上使用它