Ios 如何在核心数据中保存分段控件的索引和标题

Ios 如何在核心数据中保存分段控件的索引和标题,ios,swift,core-data,uisegmentedcontrol,Ios,Swift,Core Data,Uisegmentedcontrol,我有十几个分段控件。我为核心数据中的每一个保存所选索引。我的实体称为工作表,每个索引都保存为一个Int。这一部分非常有用 问题是我想在不同的视图中显示选定的标题。但我显然不能仅仅从核心数据中获取索引。我的新观点不知道这些数字代表什么。我知道CoreData不能保存元组,但这会让事情变得更简单 我已经尝试过创建一个可转换属性和一个自定义托管对象,但是第一个对元组不起作用,而且我似乎也不太喜欢第二个。标题和索引似乎不应该分开。将标题放在某种数据模型中。您不想将标题存储在核心数据中。这使得你的应用程序

我有十几个分段控件。我为核心数据中的每一个保存所选索引。我的实体称为工作表,每个索引都保存为一个Int。这一部分非常有用

问题是我想在不同的视图中显示选定的标题。但我显然不能仅仅从核心数据中获取索引。我的新观点不知道这些数字代表什么。我知道CoreData不能保存元组,但这会让事情变得更简单


我已经尝试过创建一个可转换属性和一个自定义托管对象,但是第一个对元组不起作用,而且我似乎也不太喜欢第二个。标题和索引似乎不应该分开。

将标题放在某种数据模型中。您不想将标题存储在核心数据中。这使得你的应用程序很难本地化。使用数据模型将索引转换为字符串,以便在分段控件和其他视图上显示


通过这种方式,您的数据模型可以为您的应用程序支持的任何语言(现在或将来)加载一组字符串,并且索引可以以适当的语言返回适当的字符串。数据模型可以被应用程序中任意数量的视图使用。

将标题放在某种数据模型中。您不想将标题存储在核心数据中。这使得你的应用程序很难本地化。使用数据模型将索引转换为字符串,以便在分段控件和其他视图上显示


通过这种方式,您的数据模型可以为您的应用程序支持的任何语言(现在或将来)加载一组字符串,并且索引可以以适当的语言返回适当的字符串。应用程序中的任意数量的视图都可以使用该数据模型。

使用
caseitrable

enum Planet: String, CustomStringConvertible, CaseIterable {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
    var description: String {
        return self.rawValue.capitalized
    }
}
并使用
Planet.allCases
数组为分段控件创建分段

let segmentedControl = UISegmentedControl(items: Planet.allCases)

在段控制中更改选择时,将所选索引保存在核心数据中

@objc func indexChanged(_ sender: UISegmentedControl) {
    print(Planet.allCases[sender.selectedSegmentIndex])
    //save sender.selectedSegmentIndex in core data
}
如果要在其他视图中显示选定的标题,请从核心数据中获取选定的索引。并从
Enum.allCases
数组中获取相应的字符串值

let selectedPlanetIndex = 5//Index fetched from core data
let selectedPlanetTitle = Planet.allCases[selectedPlanetIndex]//saturn

使用
caseitrable

enum Planet: String, CustomStringConvertible, CaseIterable {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
    var description: String {
        return self.rawValue.capitalized
    }
}
并使用
Planet.allCases
数组为分段控件创建分段

let segmentedControl = UISegmentedControl(items: Planet.allCases)

在段控制中更改选择时,将所选索引保存在核心数据中

@objc func indexChanged(_ sender: UISegmentedControl) {
    print(Planet.allCases[sender.selectedSegmentIndex])
    //save sender.selectedSegmentIndex in core data
}
如果要在其他视图中显示选定的标题,请从核心数据中获取选定的索引。并从
Enum.allCases
数组中获取相应的字符串值

let selectedPlanetIndex = 5//Index fetched from core data
let selectedPlanetTitle = Planet.allCases[selectedPlanetIndex]//saturn