我有十二个细分控件。我将每个索引的选定索引保存在Core Data中。我的实体称为工作表,每个索引都保存为一个Int。这部分效果很好。
问题是我想在其他视图中显示所选标题。但是我显然不能仅仅从Core Data中获取索引。我的新观点不知道这些数字代表什么。我知道CoreData无法保存元组,但这会使事情变得简单得多。
我曾尝试创建一个可转换的属性和一个自定义的托管对象,但是第一个不适用于元组,而第二个似乎也无法解决。标题和索引似乎不应该分开。
答案 0 :(得分:0)
将标题放入某种数据模型中。您不想将标题存储在Core Data中。这使得本地化您的应用真的很困难。使用数据模型将索引转换为字符串,以显示在分段控件和其他视图上。
通过这种方式,您的数据模型可以为应用程序支持的任何语言(现在或将来)加载一组字符串,索引可以以正确的语言返回正确的字符串。数据模型可以被您的应用程序中的任意数量的视图使用。
答案 1 :(得分:0)
使用CaseIterable
为每个SegmentedControls创建一个枚举
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)
或
Planet.allCases.enumerated().forEach {
segmentedControl.insertSegment(withTitle: $1, at: $0, animated: true)
}
在段控件中更改选择时,将所选索引保存在核心数据中。
@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