Вы будете нуждаться в какой-то пользовательский код, то ли поставить вас в его validateValue:forKey:error:
или пользовательский метод или где-нибудь еще.
Следует ли использовать встроенный метод проверки, это вопрос того, как вы предпочитаете организовывать свой код. Я бы предпочел сделать что-то вроде
- Проверьте, уникально ли это значение.
- Если это так, вставьте новый экземпляр.
Отчасти потому, что я считаю, что встроенная схема проверки является болью, но в основном это потому, что этот код будет запускаться каждый раз при сохранении изменений в объекте. Если ваш чек находится в validateValue:forKey:error:
, вы будете запускать его повторно, даже после того, как вы подтвердите, что значение уникально. Опять же, возможно, вам нужно это сделать, поэтому лучший ответ в вашем случае зависит от более общей картины того, как ваше приложение должно работать.
Простой способ приблизиться к валидации - это сделать выборку с предикатом, идентифицирующим ключ и значение, которое необходимо проверить. Единственное изменение, которое я внес бы в общий выбор, как описано в другом ответе, заключается в том, что я бы использовал countForFetchRequest:error:
вместо executeFetchRequest:error:
. Это не похоже на то, что вам действительно нужно извлекать существующие объекты во время проверки, вам просто нужно знать, существуют ли какие-либо объекты, поэтому просто проверьте это.
В зависимости от типа уникального атрибута вы можете уменьшить удар производительности, который вы собираетесь предпринять, сделав это. Например, если это строка. Проверка всех существующих строк на матч относительно дорого. С другой стороны, проверка количества существующих целых чисел является дешевой. В этом случае вам может показаться целесообразным добавить числовое свойство к типу вашего объекта, который хранит числовой хеш уникального строкового значения. Используйте хэш только при проверке уникальности. Это будет намного быстрее, чем поиск подходящих строк, и NSString
даже имеет удобный метод hash
для расчета стоимости для вас.
Спасибо за подробное объяснение – AppsDev