我正在使用Fastlane's snapshot 为要提交到App Store的应用创建屏幕截图。

它在大多数情况下都按“广告宣传”的方式工作,但似乎不喜欢我在应用程序中访问UserDefaults的方式。在一项测试中,它将生成退出状态:65 错误。
UI Testing Failure - com.me.MyApp crashed in (extension in MyApp):__ObjC.NSObject.defaultTime () -> Swift.Float
我发现UserDefaults.standard.value(forKey: "defaultTime")是语法错误的邀请,因此我创建了一个扩展名来访问UserDefaults。扩展名如下所示:

class CustomExtensions: NSObject {
    /*
     This is blank. Nothing else in here. No really...nothing else
     */
}

extension NSObject {
    // User Defaults
    func defaultTime() -> Float {
        return UserDefaults.standard.value(forKey: "defaultTime") as! Float
    }

    // a bunch of other UserDefaults
}

在应用程序中,每当需要defaultTime时,我只需键入defaultTime()即可。使用此方法访问UserDefaults值在Simulator和我测试过的设备上都可以正常工作。我只遇到snapshot的问题。

我试过在测试中添加sleep(1),但这似乎无济于事。我欢迎提出以下建议:欢迎访问UserDefaults的替代方法,这些方法使我可以在整个MyApp中轻松访问它们。

最佳答案

可能发生的情况是,在模拟器和设备上,您正在为密钥defaultTime的用户默认值写入一个值,然后再对其进行读取。 value(forKey:返回一个可选参数,如果您强制拆开它(或像此处一样强制向下转换),则如果该值为nil,则会崩溃。尝试返回任意一个:

func defaultTime() -> Float? {
    return UserDefaults.standard.value(forKey: "defaultTime") as? Float
}

或使用默认值:
func defaultTime() -> Float {
    return UserDefaults.standard.value(forKey: "defaultTime") as? Float ?? 0.0
}

关于ios - 使用FaSTLane快照难以读取UserDefaults,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40209848/

10-13 02:28