我从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)在这种情况下如何正确处理错误和零域值?
答案 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:]
。我希望有所帮助!如果您需要进一步澄清,请告诉我们!