境界一定不能为零

时间:2016-10-26 09:24:14

标签: ios objective-c realm

我从Realm0.9xно2.0.x更新了我的应用程序 现在我在Crashlytics的8,9和10个iOS设备上有很多关于致命异常的错误报告:

Fatal Exception: RLMException
Realm must not be nil

堆栈跟踪如下所示:

  

RLMObjectStore.mm第81行   RLMGetObjects

     

RLMObject.mm第154行   + [RLMObject objectsInRealm:withPredicate:]

     

RLMObject.mm第146行   + [RLMObject objectsInRealm:where:args:]

     

RLMObject.mm第140行   + [RLMObject objectsInRealm:where:]

     

Sessions.m第88行   + [Sessions resultWithSessionsWhere:]

     

Sessions.m第128行   + [Sessions activeSession]

     

Sessions.m第102行   + [Sessions appLaunched]

     

AppDelegate.m第60行    - [AppDelegate应用程序:didFinishLaunchingWithOptions:]

我无法在调试环境中重现错误。它触及了大约30-40%的用户(根本没有),而且看起来只有老用户才会被触及。

此方法中没有领域对象:

/**
 *  Create and returns Realm configuration for sessions database
 */
+(nonnull RLMRealmConfiguration*)realmConfigurationForSessions
{
    RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
    // Use the default directory, but replace the filename with the 'sessions.realm'
    config.fileURL = [NSURL
                  URLWithString:[[[config.fileURL.absoluteString stringByDeletingLastPathComponent]
                                      stringByAppendingPathComponent:@"sessions"]
                                     stringByAppendingPathExtension:@"realm"]];
    return config;
}

+(nullable RLMRealm*)realmForConfiguration:(nullable RLMRealmConfiguration*)config
{
    if (!config) {
        return nil;
    }
    NSError *error;
    // Open the Realm with the configuration
    RLMRealm *realm = [RLMRealm realmWithConfiguration:config
                                                 error:&error];
    if (error) {
        DLog(@"error: %@", error.localizedDescription);
    }
    return realm;
}

问题:1)这个奇怪问题的原因是什么? 2)在这种情况下如何正确处理错误和零域值?

1 个答案:

答案 0 :(得分:2)

该异常occurs in a pretty straightforward case。发生错误,导致RLMRealm实例未应该创建。

根据您提供的信息,您构建fileURL媒体资源的方式可能无法在所有情况下取得成功。

我的建议:

  • 使用[NSURL fileURLWithPath:]代替[NSURL URLWithString:]。对于文件路径而言,这个更好地针对网络URL进行了优化。
  • 使用config.fileURL.path代替config.fileURL.absoluteString。有关详细信息,请check this SO answer
  • 为了保持一致,请使用[NSURL URLByAppendingPathComponent:]而不是[NSString stringByAppendingPathComponent:]

我希望有所帮助!如果您需要进一步澄清,请告诉我们!