Внимательно прочтите сообщение об ошибке, оно довольно ясное.
Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: 'Попытка вставить объект списка, не относящегося к свойствам ("(temperature: \ "C \", размер: \ "mm \") ") для ключа Current Weather Setting '
Объект списка - это кортеж , который не соответствует списку свойств.
Разумным решением является настраиваемая структура и Codable
, обработчик завершения бессмыслен, потому что UserDefaults
синхронный.
struct WeatherUnit : Codable {
let temperature, measurement : String
}
var currentWeatherUnit = [WeatherUnit]()
func checkingForSetting() {
if let data = UserDefaults.standard.data(forKey: "Current Weather Setting") {
do {
currentWeatherUnit = try PropertyListDecoder().decode([WeatherUnit].self, from: data)
print("Current weather setting is exist")
} catch { print(error) }
} else {
currentWeatherUnit = [WeatherUnit(temperature: "C", measurement: "mm")]
let data = try? PropertyListEncoder().encode(currentWeatherUnit)
UserDefaults.standard.set(data, forKey: "Current Weather Setting")
print("Create new setting for current weather")
}
}