使用 Fastlane Snapshot 难以读取 UserDefaults
Difficulty reading UserDefaults with Fastlane Snapshot
我正在使用 Fastlane's snapshot
为即将提交到 App Store 的应用创建屏幕截图。
它在大多数情况下都有效 "as advertised",但它似乎不喜欢我在我的应用程序中访问 UserDefaults
的方式。在一项测试中,它会生成 Exit status: 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
值在模拟器和我测试过的设备上工作正常。我只遇到 snapshot
.
的问题
我试过在测试中添加 sleep(1)
,但这似乎没有任何作用。我欢迎关于访问 UserDefaults
的替代方法的建议,这使我能够在整个 MyApp 中轻松访问它们。
可能发生的情况是,在您的模拟器和设备上,您正在为键 defaultTime
的用户默认值写入一个值,然后再读取它。 value(forKey:
returns 一个可选的,如果你强制展开它(或者像你在这里做的那样强制向下转换),如果值为 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
}
我正在使用 Fastlane's snapshot
为即将提交到 App Store 的应用创建屏幕截图。
它在大多数情况下都有效 "as advertised",但它似乎不喜欢我在我的应用程序中访问 UserDefaults
的方式。在一项测试中,它会生成 Exit status: 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
值在模拟器和我测试过的设备上工作正常。我只遇到 snapshot
.
我试过在测试中添加 sleep(1)
,但这似乎没有任何作用。我欢迎关于访问 UserDefaults
的替代方法的建议,这使我能够在整个 MyApp 中轻松访问它们。
可能发生的情况是,在您的模拟器和设备上,您正在为键 defaultTime
的用户默认值写入一个值,然后再读取它。 value(forKey:
returns 一个可选的,如果你强制展开它(或者像你在这里做的那样强制向下转换),如果值为 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
}