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 远程配置值。 其次是可能丢失的图像。您可以随时添加断点以查看值是什么。