【问题标题】:How to save a specific NSLocale in CoreData如何在 CoreData 中保存特定的 NSLocale
【发布时间】:2018-09-12 03:27:27
【问题描述】:

试图将语言环境保存到 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);
        }
    }

从我尝试保存的每个语言环境: 货币代码 - 字符串 标识符 - 字符串 货币名称 - 字符串 货币符号 - 字符串

我应该单独保存这些属性,还是可以保存整个区域设置?

【问题讨论】:

    标签: swift core-data nslocale


    【解决方案1】:

    在 Swift 中它是 Locale 没有 NS 并且没有桥接

    let locale = Locale.current
    

    保存Locale 中的identifier,即String

    let currentIdentifier = Locale.current.identifer
    

    并在阅读时创建Locale

    let locale = Locale(identifier : currentIdentifier)
    

    【讨论】:

    • 不,它们是不同的。
    • 我正在尝试保存用户选择的任何货币的标识符,但现在它似乎只使用我的本地标识符。我已经更新了上面的代码。我认为它应该是别的东西:currencyModel.identifier = locale.localeIdentifier
    • 请停止使用NSLocale。使用原生 Swift 结构。
    • 那会是什么样子?当我输入它时,代码提示会给我 NSLocale 版本。做了一些更新。我遇到的问题之一是 Swift 语言环境上似乎没有 displayName 属性。
    • 您也可以使用localizedString(for... 方法。
    【解决方案2】:

    您可以将 NSLocale 保存为 Transformable 属性。

    NSKeyedUnarchiveFromDataTransformerName 默认用于将普通对象转换为 Core Data 存储表示。但在这种情况下,您的普通对象应该符合 NSCodingNSSecureCoding 协议。

    如果你想转换更复杂的对象,你必须继承NSValueTransformer

    但是 NSLocale 符合 NSSecureCoding,因此您可以通过将 Entity 的此属性的类型设置为 Transformable 来直接保存它。

    请参阅 Apple 的 sample

    【讨论】:

    • 我更新了我的问题和代码,我是否错误地创建了语言环境数组?
    猜你喜欢
    • 2015-02-26
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多