У валидации данных есть два аспекта:
- указание правил;
- имлементация правил.
Можно указать, что делать со связанной сущностью, когда другая удаляется. Это делается в Data Model инспекторе в настройках отношения сущностей. Используя этот же интерфейс можно указывать правила валидации.
Современные интерфейсы пытаются устранить саму возможность создания таких условий в которых пользователь может ошибиться. Например, на Mac OS могут отключаться некоторые пункты меню, а на iOS показываться соответствующая числовому полю клавиатура чтобы невозможно было ввести буквы.
Современные интерфейсы пытаются устранить саму возможность создания таких условий в которых пользователь может ошибиться. Например, на Mac OS могут отключаться некоторые пункты меню, а на iOS показываться соответствующая числовому полю клавиатура чтобы невозможно было ввести буквы.
Есть три типа правил в модели данных или схеме Core Data:
- Referential integrity (ссылочная целостность)
- Data validation
- Data quality (сравнение введенных данных с другими)
Свойства сущности
- Name. Примеры: Job, Customer
- Class. Класс для сущности. Можно оставить по умолчанию NSManagedObject. И получать доступ к значениям посредством key-value coding (KVC).
- Abstract Entity. Аналог абстрактного объекта в ООП.
- Parent Entity. Родительская сущность. Может быть и абстрактной сущностью.
- Indexes. Индексы улучшают производительность. Поиск работает быстрее, но данные обновляются медленнее. Индексы указываемые для сущности являются составными индексами состоящими из разделенных запятой свойствами сущности.
Свойства атрибутов
- Name
- Properties. Transient-свойства не сохраняются в хранилище данных (например, свойство name_last_first может быть transient и компоноваться из свойств last_name и first_name).
- Optional. Чтобы сделать атрибут обязательным надо выключить эту опцию.
- Indexed. Индексировать ли атрибут? Если да, то это будет одиночный индекс атрибута, а не составной индекс для сущности в целом.
- Attribute Type. Тип атрибута.
- Validation. Правила валидации зависят от типа атрибута. Для строк можно указать минимальную и максимальную длину. Для числовых типов максимальное и минимальное значение.
- Default Value. Значение по умолчанию. Хорошо подобранные значения по умолчанию ускоряют ввод данных для пользователя.
- Regular Expression. Для строк можно указать регулярное выражение, которое будет использоваться для валидации строки.
- Advanced. На Mac OS X можно проиндексировать значение атрибута в Spotlight для более быстрого поиска. Также можно хранить содержимое атрибута в отдельном файла, что полезно для больших структур данных (например, видео).
Свойства отношений
- Name. Примеры: jobs, customers
- Destination. Другой конец отношения.
- Inverse. Большинство отношений имеют инверсию - отношение в котором Destination является источником.
- Properties. Transient-отношения существуют только во время выполнения. Отношение может быть опциональным. Например отношение job-to-customer должно иметь заказчика потому что без заказчика не существует задачи. Отношение customer-to-job может быть без задачи потому что заказчик мог еще зарегистрировать задачу.
- Arranged. Можно указать, что данные упорядочены в хранилище данных.
- Plural/Cardinality. Можно указать что это отношение один-к-одному или один-ко-многим. Иногда это свойство называется мощностью связи. Например, один заказчик может иметь много задач, но одна задача всегда имеет одного заказчика.
- Count. Можно указать минимальное и максимальное количество сторон с каждой стороны отношения.
- Delete Rule. Как должно вести себя отношение, когда одна из сторон удаляется?
- Advanced. Аналогично атрибутам. Во многом отношения похожи на атрибуты.
Ввод данных в интерфейс и перемещение их в модель данных
View controller перемещает данные из Core Data managed object в текстовое поле и обратно.self.name.text = [self.detailItem valueForKey:@”name”];
Тут используется KVC для того чтобы у объекта detailItem класса NSManagedObject получить нужное значение. Обратная операция:
[self.detailItem setValue: self.name.text forKey:@”name”];
Formatter-ы в Cocoa и Cocoa Touch используются для преобразования текста в другие типы и обратное. На Mac OS можно перетаскивать formatter-ы из библиотеки на текстовые поля. Также есть текстовое поле уже содержащее number formatter. Например NSDateFormatter содержит методы dateFromString и stringFromDate. Все formatter-ы являются наследниками NSFormatter и все перекрывают методы stringForObjectValue и getObjectValueForString.
Пример
1) Объявим свойство:
@property (nonatomic, retain, readonly) NSNumberFormatter *numberFormatter;
2) Имплементируем свойство:
@synthesize numberFormatter;
- (NSNumberFormatter *)numberFormatter { if (numberFormatter == nil){ numberFormatter = [[NSNumberFormatter alloc] init]; } return numberFormatter; }
3) Пример использования:
self.price.text = [numberFormatter stringFromNumber: [NSNumber numberWithInteger:self.detailItem valueForKey:@”price”];]]]; [self.detailItem setValue: [numberFormatter numberFromString: self.price.text forKey:@”price”];