gpt4 book ai didi

ios - 可选链上的 EXC_BREAKPOINT

转载 作者:行者123 更新时间:2023-11-28 11:41:23 35 4
gpt4 key购买 nike

我是 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 方法在其输入参数 NSStringnil 的情况下实际上不起作用,如 documentation of the method 中所述。

Raises an NSInvalidArgumentException if aString is nil.

在调用 getTutorialDoneForEmail 方法之前,你应该做一个 nil 检查,或者更好的是,让 getTutorialDoneForEmail 只接受非 nil NSStrings.

+ (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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com