Не удалось привести значение типа «__NSCFData» (0x39490110) к «NSString» (0x394990ac) - PullRequest
0 голосов
/ 23 октября 2018

Произошел сбой при приведении jsonstring к object с использованием каркаса objectMapper в следующей части кода, но способ, который я реализовал, правильный, я думаю.

Не удалось привестизначение типа '__NSCFData' (0x39490110) в 'NSString' (0x394990ac)

Вот код:

static func saveUserRefererInfo(userRefInfo : UserRefererInfo?)
{
    if userRefInfo != nil {
        let jsonText = Mapper().toJSONString(userRefInfo!, prettyPrint: true)!
        userDefaults.set(jsonText, forKey: SharedPreferenceHelper.USER_REFERER_INFO)
    } else {
        userDefaults.set(nil, forKey: SharedPreferenceHelper.USER_REFERER_INFO)
    }
}

static func getUserRefererInfo() -> UserRefererInfo?
{
    let userRefInfo = userDefaults.value(forKey: SharedPreferenceHelper.USER_REFERER_INFO)
    if userRefInfo != nil {
        return Mapper<UserRefererInfo>().map(JSONString: userRefInfo! as! String)
    }
    return nil
} 

В этой строке кода происходит сбой:

return Mapper<UserRefererInfo>().map(JSONString: userRefInfo! as! String)

1 Ответ

0 голосов
/ 23 октября 2018

Ошибка довольно очевидна: тип userRefInfo равен (NS)Data.

Я не знаю, как обрабатывается userRefInfo, но это обычный способ получить Data из UserDefaults.

if let userRefInfo = userDefaults.data(forKey: SharedPreferenceHelper.USER_REFERER_INFO)
    return Mapper<UserRefererInfo>().map(JSONString: userRefInfo)
}

Никогда value(forKey: и никогда if foo != nil { ... foo! }

Учтите, что ObjectMapper устарел в пользу Codable в Swift 4 +

...