как сохранить индекс и заголовок сегментированного элемента управления в основных данных - PullRequest
0 голосов
/ 01 июня 2019

У меня есть дюжина сегментированных элементов управления.Я сохраняю выбранный индекс для каждого в Core Data.Моя сущность называется Worksheet, и каждый индекс сохраняется как Int.Эта часть прекрасно работает.

Проблема в том, что я хочу отображать выбранные заголовки в другом представлении.Но я, очевидно, не могу просто взять индекс из Core Data.Мой новый взгляд не имеет представления о том, что означают эти цифры.Я знаю, что CoreData не может сохранять кортежи, однако это значительно упростит процесс.

Я попытался создать трансформируемый атрибут и настраиваемый управляемый объект, но первый не будет работать для кортежей, иЯ не могу обернуть голову вокруг второго.Кажется, что заголовок и индекс не должны быть разделены.

Ответы [ 2 ]

1 голос
/ 01 июня 2019

Создайте перечисление для каждого SegmentedControls с помощью CaseIterable

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
1 голос
/ 01 июня 2019

Поместите заголовки в какую-то модель данных.Вы не хотите хранить заголовки в Core Data.Это делает локализацию вашего приложения действительно сложной.Используйте вашу модель данных для преобразования индексов в строки для отображения на сегментированных элементах управления и в других представлениях.

Таким образом, ваша модель данных может загружать набор строк для любых языков, поддерживаемых вашим приложением (сейчас или в будущем).) и индексы могут возвращать правильные строки на правильном языке.И модель данных может использоваться любым количеством представлений в вашем приложении.

...