Как сохранить определенный NSLocale в CoreData - PullRequest
0 голосов
/ 12 сентября 2018

Пытался сохранить локали в CoreData и просто не знал, в каком формате мне следует сохранять данные.

let locale = Locale.current
let currencyCodesArray = Locale.commonISOCurrencyCodes

for currencyCode in currencyCodesArray {

        // let currencyName = locale.displayName(forKey:NSLocale.Key.currencyCode, value : currencyCode)
        let currencyName = locale.localizedString(forCurrencyCode: currencyCode)

        //let currencySymbol = locale.displayName(forKey:NSLocale.Key.currencySymbol, value : currencyCode)
        let currencySymbol = locale.currencySymbol

        let identifier = locale.localizedString(forIdentifier: currencyCode)

         print(identifier);

        if let _ = currencySymbol, let currencyName = currencyName{

            let currencyModel = CurrencyModel()
            currencyModel.currencyName = currencyName
            currencyModel.currencyCode = currencyCode
            currencyModel.currencySymbol = currencySymbol!

            //currencyModel.identifier = identifier

            currencies.append(currencyModel)

            //print(identifier);
        }
    }

Из каждой локали, которую я пытаюсь сохранить: код валюты - строка Идентификатор - Строка название валюты - строка символ валюты - строка

Должен ли я сохранять каждое из этих свойств по отдельности или можно сохранить всю локаль?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вы можете сохранить NSLocale как Преобразуемый атрибут .

NSKeyedUnarchiveFromDataTransformerName используется по умолчанию для преобразования вашего простого объекта в представление хранилища Core Data.Но в этом случае ваш простой объект должен соответствовать протоколу NSCoding или NSSecureCoding .

Если вы хотите преобразовать более сложный объект, вы должны создать подкласс NSValueTransformer .

Но NSLocale соответствует NSSecureCoding, поэтому вы можете сохранить его напрямую, установив тип этого атрибута вашего объекта в Transformable.

См. образец от Apple.

0 голосов
/ 12 сентября 2018

В Swift это Locale без NS и без мостика

let locale = Locale.current

Сохраните identifier из Locale, который является String

let currentIdentifier = Locale.current.identifer

И создать Locale при чтении

let locale = Locale(identifier : currentIdentifier)
...