我是 Swift 的新手,但我是 Objective-c 方面经验丰富的 iOS 开发人员。 目前,crashlytics 已向单个用户报告了 EXC_BREAKPOINT 崩溃,但这是系统性的。 我已尝试使用多种设备和操作系统版本,但无法重现。
行是:
if(RealmManager.sharedInstance()?.loggedUser()?.agreementPhotoRead.boolValue ?? false || PreferencesManager.getTutorialDone(forEmail: RealmManager.sharedInstance()?.loggedUser()?.email)){
}
可选链有什么问题? Swift 版本为 4.2。
编辑:
geTutorialDone
方法在 objective-c 中。这里的代码:
+ (BOOL)getTutorialDoneForEmail:(NSString *)email
{
return [[NSUserDefaults standardUserDefaults] boolForKey:[TUTORIAL_PREF stringByAppendingString:email]];
}
最佳答案
问题是 stringByAppendingString
方法在其输入参数 NSString
为 nil
的情况下实际上不起作用,如 documentation of the method 中所述。
Raises an NSInvalidArgumentException if aString is nil.
在调用 getTutorialDoneForEmail
方法之前,你应该做一个 nil
检查,或者更好的是,让 getTutorialDoneForEmail
只接受非 nil
NSString
s.
+ (BOOL)getTutorialDoneForEmail:(nonnull NSString *)email {
return [[NSUserDefaults standardUserDefaults] boolForKey:[TUTORIAL_PREF stringByAppendingString:email]];
}
此外,如果 agreementPhotoRead
可以是 nil
,你需要将它的调用可选地链接到 boolValue
,否则 Swift 会将其作为隐式处理解包可选,如果 agreementPhotoRead
实际上是 nil
,将导致运行时错误。
RealmManager.sharedInstance()?.loggedUser()?.agreementPhotoRead?.boolValue
关于ios - 可选链上的 EXC_BREAKPOINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53536560/