Подтвердить что ты не робот

Как добавить уникальные ограничения для некоторых полей в Core Data

Я новичок в разработке iOS, и я использую XCode 5.02 для разработки. У меня есть сущность (например, User), и мне нужно установить уникальное ограничение для его имени, но я не могу найти, как я могу это сделать с помощью визуального редактора. Можно ли это сделать через графический интерфейс? Или это возможно только с помощью кода? Благодарим за продвижение. Если это возможно, я буду рад получить снимок экрана.

4b9b3361

Ответ 1

Это действительно изменилось в iOS 9 - Apple добавила возможность добавлять уникальные ограничения для сущностей. Я написал сообщение в блоге, объяснив, как получить эту настройку.


tl; dr, там есть новый раздел на боковой панели при выборе объекта в редакторе для Core Data. Вы можете установить, какие ограничения (-ы) вы хотите быть уникальными во всех экземплярах объекта

Для автоматического разрешения конфликтов во время сохранения вам нужно убедиться, что у вас есть политика слияния, установленная для контекста управляемого объекта, иначе вы просто получите ошибки при сохранении (что может быть на самом деле тем, что вы хотите)

_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];

Помните, что разрешение конфликтов происходит только во время сохранения, а не вставки. Поэтому, если вы используете NSFetchedResultsController, вы увидите объекты с неповторимыми ограничениями по мере их вставки.

введите описание изображения здесь

Если вы хотите, чтобы у вас не было объектов с неповторимыми ограничениями в контексте управляемого объекта без сохранения (если вы используете FRC), этот ответ по-прежнему, вероятно, лучший способ. Хотя, имейте в виду, это дорого, если вы делаете много вставок, поскольку NSFetchRequests - это дорогостоящие операции.

Ответ 2

Быстрое решение:

Как отмечено в другом ответе, вы можете иметь уникальные ограничения в Core Data для iOS9 и далее.

Для этого сначала добавьте ограничения в Entity из редактора основных данных (объяснение в ответе Захари).

Затем добавьте эту строку в код:

managedObjectContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy

Примечание. Уникальность проверяется, когда вы выполняете managedObjectContext.save(), пока вы просто добавляете объекты в управляемый объект.

NSMergeByPropertyObjectTrumpMergePolicy - это только одна из политик объединения, которая перезаписывает старое значение новым. Возможно, вам захочется проверить документацию на другие параметры.