#core-data
#основные данные
Вопрос:
Как мне проверить, существует ли уже сущность, прежде чем создавать новую с теми же атрибутами? Или CoreData уже достаточно умен, чтобы не создавать объект?
Например, у меня есть сотрудник объекта с именем и идентификатором атрибутов. Теперь пользователь создает нового сотрудника через диалоговое окно, но этот сотрудник уже завершает работу на основе идентификатора (могут быть сотрудники с таким же именем). Я думаю, можно было бы создать запрос на выборку, но куда мне поместить этот код, нужно ли мне создавать класс для Employee для этого?
редактировать: после публикации моего вопроса я нашел эту страницу: http://www.macresearch.org/cocoa-scientists-part-xxiii-itunes-ifying-core-data-app Было бы это способом сделать это? Похоже, что если у меня больше объектов, я дублирую много кода.
Ответ №1:
Основные данные позволят вам создавать управляемые объекты, которые идентичны во всем, кроме их идентификатора объекта.
Самым простым решением было бы запретить дублирование имен сотрудников. Когда пользователь вводит нового сотрудника, он запускает событие с помощью клавиатуры или мыши. В вашем методе действий для этого события сначала проверяется запись пользователя, проверяя, соответствует ли введенное им имя существующему имени. Приведенная вами ссылка дает пример запроса на выборку, который вы могли бы использовать, хотя вы можете захотеть изучить, как получить только количество совпадающих объектов, что было бы более эффективно. Если есть совпадение, отображается предупреждение.
Если вы действительно хотите разрешить повторяющиеся имена, вы можете полагаться на присвоенный CoreData ObjectId для различения записей. Но пользователь не будет знать, что это за идентификатор. Таким образом, вам все равно нужно будет проверить совпадение имен и отобразить диалоговое окно подтверждения с запросом пользователя, действительно ли он намерен создать отдельную запись сотрудника с тем же именем.
Комментарии:
1. спасибо — я продолжу и реализую код из этой ссылки и рассмотрю ваше предложение. Может быть, я помещу его в категорию, чтобы я мог использовать его для всех своих объектов.