Каждый элемент сегментированного элемента управления представлен индексом типа Int
, и поэтому этот индекс начинается с 0
.
Итак, используя ваш пример сегментированного элемента управления с тремя сегментами (например,: Boy ♂,?, Girl ♀), каждый сегмент представлен тремя индексами 0, 1 и 2.
Если пользователь выбирает сегментированный элемент управления, представляющий Girl ♀, то ...
segmentedControl.selectedSegmentIndex = 2
При сохранении значения с использованием инфраструктуры базовых данных, которая должна быть представлена в пользовательском интерфейсе как сегментированный контрольный индекс, поэтому я всегда начинаю с 0
.
Все, что вы читаете из этогоСуть в том, что предпочтение программиста - то есть, и это должно быть понятно - есть несколько способов достичь того же результата, и вы должны выбрать тот, который лучше всего подходит вам и вашему стилю кодирования. Заметьте также, что это может сбить с толку новичка, поэтому я бы поощрял терпение. Мой единственный совет: будьте как можно проще, пока вы не протестируете, не отладите и не протестируете достаточно, чтобы понять различия.
Итак, продолжим:
Документация Apple утверждает, что ...
... на 64-разрядных платформах, размер Int такого же размера, как Int64.
То же самое в редакторе модели Core Data (файл .xcdatamodeld
)Я решил применить тип атрибута Integer 64
для любого значения, которое будет использоваться в моем коде как Int
.
Кроме того, где-то, некоторое время назад, я читал, что если нет причин использовать Integer 16
или Integer 32
, то по умолчанию используется Integer 64
в графе объектной модели. (Я предполагаю, что Integer 16
или Integer 32
сохранены для обратной совместимости.) Если я найду эту ссылку, я свяжу ее здесь.
Я мог бы написать об использовании скалярных типов атрибутов здесь и вручную написать подклассы управляемого объекта, выбрав в инспекторе атрибутов Class Codegen = Manual / None, но, честно говоря, я решил, что такая добавленная деталь только усложнитимеет значение.
Таким образом, ваш подкласс (ы) управляемых объектов "автоматически сгенерированный Core Data" (NSManagedObject
) будет использовать необязательную оболочку NSNumber?
...
Поэтому вам нужно будет преобразоватьВаши сохраненные / сохраненные данные в вашем коде.
Я делаю это в двух местах ... когда я получаю доступ к данным и когда я сохраняю данные.
(отмечая, что я предполагаю, что ваша сущность имеет тип Dog
и существует экземпляр dog
, то есть let dog = Dog()
)
// access
tempGender = dog.gender as? Int
// save
dog.gender = tempGender as NSNumber?
Между ними я использую "temp" var
свойство типа Int
для работы с сегментированным элементом управления.
// temporary property to use with segmented control
private var tempGender: Int?
Любые вопросы задавайте в комментариях.