Удаленная конфигурация Firebase неожиданно обнаружила Nil при распаковке ошибки configValue (forKey :) - PullRequest
0 голосов
/ 04 августа 2020

Я использую удаленную конфигурацию в своем приложении IOS, чтобы установить несколько значений, таких как имя, имя изображения и другие вещи. На прошлой неделе тот же код работал, но без каких-либо изменений, теперь он дает мне эту ошибку: «Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения: файл»

Вот код, который дает мне эта ошибка. Я следовал этому руководству: https://www.youtube.com/watch?v=3mDzJoDJIqc из серии Firecast.

 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!)!
    
        
    }
}

НАСТРОЙКА УДАЛЕННОЙ КОНФИГУРАЦИИ MY FIREBASE:

Here is the Remote Config in FB

МОЯ ОШИБКА

Почему не работает?

1 Ответ

0 голосов
/ 05 августа 2020

Вы принудительно разворачиваете строку, а затем изображение. Вы уверены, что удаленная конфигурация равна нулю? В вставленном сообщении об ошибке написано "файл".

  • Сначала убедитесь, что файл существует в вашем каталоге ресурсов с нужным именем.
  • Во-вторых, проверьте значение в Firebase консоли и убедитесь, что в нем нет неожиданных символов.

Если вы скопируете вставленное значение, вероятно, останется табуляция, пробел или другой невидимый символ.

РЕДАКТИРОВАТЬ: Вы можете попробовать что-то вроде этого для первого изображения, где вы получаете сообщение об ошибке:

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. Второй для возможного отсутствующего изображения. Вы всегда можете добавить точку останова, чтобы увидеть значения.

...