Firebase 远程配置在解包错误 configValue(forKey:) 时意外发现 Nil
Firebase Remote Config Unexpectedly Found Nil while unwrapping error configValue(forKey:)
我在我的 IOS 应用程序中使用远程配置来设置一些值,例如名称、图像名称和其他内容。上周,相同的代码可以正常工作但没有任何更改,它现在给我这个错误:“致命错误:在展开可选值时意外发现 nil:文件”
这是给我这个错误的代码。我遵循了这个教程:https://www.youtube.com/watch?v=3mDzJoDJIqc 来自 Firecasts 系列。
func setUpRemoteConfigDefaults() {
let remoteConfigDefaultValues = [ "mp1Img1" : "elcap" as NSObject,
"mp1Img2" : "elcap" as NSObject,
"mp1Img3" : "elcap" as NSObject,
"mp1Img4" : "elcap" as NSObject,
"mp1Points" : "elcap" as NSObject,
"mp1Name" : "elcap" as NSObject,
"mp1Description" : "elcap" as NSObject,
"mp1Logo" : "elcap" as NSObject,
"mp1WebsiteCompany" : "elcap" as NSObject,
"mp1Company" : "elcap" as NSObject,
"mp1WebsiteToPurchase" : "elcap" as NSObject,
"mp1AddProdImg1" : "elcap" as NSObject,
"mp1AddProdImg2" : "elcap" as NSObject,
"mp1AddProdImg3" : "elcap" as NSObject,
"mp1AddProdImg4" : "elcap" as NSObject
]
RemoteConfig.remoteConfig().setDefaults(remoteConfigDefaultValues)
}
func fetchRemoteConfig() {
//FIXME Remove this frist line
let debugSettings = RemoteConfigSettings(developerModeEnabled: true)
RemoteConfig.remoteConfig().fetch(withExpirationDuration: 0) { [unowned self] (status, error) in
guard error == nil else {
return
}
RemoteConfig.remoteConfig().activateFetched()
self.updateViewWithRCValues()
}
}
func updateViewWithRCValues() {
let rc = RemoteConfig.remoteConfig()
let M1IMG1 = UIImage(named: rc.configValue(forKey: "mp1Img1").stringValue!)!
let M1IMG2 = UIImage(named: rc.configValue(forKey: "mp1Img2").stringValue!)!
let M1IMG3 = UIImage(named: rc.configValue(forKey: "mpImg3").stringValue!)!
let M1IMG4 = UIImage(named: rc.configValue(forKey: "mpImg4").stringValue!)!
let PVID = ""
let POINTS = rc.configValue(forKey: "mpPoints").stringValue!
let NAME = rc.configValue(forKey: "mp1Name").stringValue!
let DESC = rc.configValue(forKey: "mp1Description").stringValue!
let LOGO = UIImage(named: rc.configValue(forKey: "mp\(i)Logo").stringValue!)!
let CWEB = rc.configValue(forKey: "mp1WebsiteCompany").stringValue!
let CNAME = rc.configValue(forKey: "mp1Company").stringValue!
let PROMO = ""
let PWEB = rc.configValue(forKey: "mp1WebsiteToPurchase").stringValue!
let ADD1 = UIImage(named: rc.configValue(forKey: "mpAddProdImg1").stringValue!)!
let ADD2 = UIImage(named: rc.configValue(forKey: "mp1AddProdImg2").stringValue!)!
let ADD3 = UIImage(named: rc.configValue(forKey: "mp1AddProdImg3").stringValue!)!
let ADD4 = UIImage(named: rc.configValue(forKey: "mp1AddProdImg4").stringValue!)!
}
}
我的 Firebase 远程配置设置:
为什么这不起作用?
你是在强行展开一个字符串而不是一个图像。您确定远程配置为零吗?它在您粘贴的错误消息中显示“文件”。
- 首先确保您的资产目录中存在您所需名称的文件。
- 其次,检查 Firebase 控制台中的值,并确保它没有任何意外字符。
如果您复制粘贴该值,可能会留下制表符、space 或其他不可见字符。
编辑: 您可以对出现错误的第一张图片尝试这样的操作:
guard let name = rc.configValue(forKey: "mp1Img1").stringValue else {
print("Remote config is nil for mp1Img1")
return
}
guard let image = UIImage(named: name) else {
print("Image named \(name) does not exist in asset catalog.")
return
}
第一个守卫将控制 nil 远程配置值。
其次是可能丢失的图像。您可以随时添加断点以查看值是什么。
我在我的 IOS 应用程序中使用远程配置来设置一些值,例如名称、图像名称和其他内容。上周,相同的代码可以正常工作但没有任何更改,它现在给我这个错误:“致命错误:在展开可选值时意外发现 nil:文件”
这是给我这个错误的代码。我遵循了这个教程:https://www.youtube.com/watch?v=3mDzJoDJIqc 来自 Firecasts 系列。
func setUpRemoteConfigDefaults() {
let remoteConfigDefaultValues = [ "mp1Img1" : "elcap" as NSObject,
"mp1Img2" : "elcap" as NSObject,
"mp1Img3" : "elcap" as NSObject,
"mp1Img4" : "elcap" as NSObject,
"mp1Points" : "elcap" as NSObject,
"mp1Name" : "elcap" as NSObject,
"mp1Description" : "elcap" as NSObject,
"mp1Logo" : "elcap" as NSObject,
"mp1WebsiteCompany" : "elcap" as NSObject,
"mp1Company" : "elcap" as NSObject,
"mp1WebsiteToPurchase" : "elcap" as NSObject,
"mp1AddProdImg1" : "elcap" as NSObject,
"mp1AddProdImg2" : "elcap" as NSObject,
"mp1AddProdImg3" : "elcap" as NSObject,
"mp1AddProdImg4" : "elcap" as NSObject
]
RemoteConfig.remoteConfig().setDefaults(remoteConfigDefaultValues)
}
func fetchRemoteConfig() {
//FIXME Remove this frist line
let debugSettings = RemoteConfigSettings(developerModeEnabled: true)
RemoteConfig.remoteConfig().fetch(withExpirationDuration: 0) { [unowned self] (status, error) in
guard error == nil else {
return
}
RemoteConfig.remoteConfig().activateFetched()
self.updateViewWithRCValues()
}
}
func updateViewWithRCValues() {
let rc = RemoteConfig.remoteConfig()
let M1IMG1 = UIImage(named: rc.configValue(forKey: "mp1Img1").stringValue!)!
let M1IMG2 = UIImage(named: rc.configValue(forKey: "mp1Img2").stringValue!)!
let M1IMG3 = UIImage(named: rc.configValue(forKey: "mpImg3").stringValue!)!
let M1IMG4 = UIImage(named: rc.configValue(forKey: "mpImg4").stringValue!)!
let PVID = ""
let POINTS = rc.configValue(forKey: "mpPoints").stringValue!
let NAME = rc.configValue(forKey: "mp1Name").stringValue!
let DESC = rc.configValue(forKey: "mp1Description").stringValue!
let LOGO = UIImage(named: rc.configValue(forKey: "mp\(i)Logo").stringValue!)!
let CWEB = rc.configValue(forKey: "mp1WebsiteCompany").stringValue!
let CNAME = rc.configValue(forKey: "mp1Company").stringValue!
let PROMO = ""
let PWEB = rc.configValue(forKey: "mp1WebsiteToPurchase").stringValue!
let ADD1 = UIImage(named: rc.configValue(forKey: "mpAddProdImg1").stringValue!)!
let ADD2 = UIImage(named: rc.configValue(forKey: "mp1AddProdImg2").stringValue!)!
let ADD3 = UIImage(named: rc.configValue(forKey: "mp1AddProdImg3").stringValue!)!
let ADD4 = UIImage(named: rc.configValue(forKey: "mp1AddProdImg4").stringValue!)!
}
}
我的 Firebase 远程配置设置:
为什么这不起作用?
你是在强行展开一个字符串而不是一个图像。您确定远程配置为零吗?它在您粘贴的错误消息中显示“文件”。
- 首先确保您的资产目录中存在您所需名称的文件。
- 其次,检查 Firebase 控制台中的值,并确保它没有任何意外字符。
如果您复制粘贴该值,可能会留下制表符、space 或其他不可见字符。
编辑: 您可以对出现错误的第一张图片尝试这样的操作:
guard let name = rc.configValue(forKey: "mp1Img1").stringValue else {
print("Remote config is nil for mp1Img1")
return
}
guard let image = UIImage(named: name) else {
print("Image named \(name) does not exist in asset catalog.")
return
}
第一个守卫将控制 nil 远程配置值。 其次是可能丢失的图像。您可以随时添加断点以查看值是什么。