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

Ошибка согласования Xcode: установка правила удаления исключений... является расширенной настройкой

После создания модели данных в Xcode она бросает следующую ошибку для каждого из отношений объекта:

Consistency Error:
Setting the No Action Delete Rule on [object relationship] is an advanced setting

Что Xcode пытается сказать мне и как мне ответить?

4b9b3361

Ответ 1

Основные данные используют обратные отношения и правила удаления, чтобы поддерживать согласованный граф объекта.

Скажем, у вас есть A.foo <1 > 1 > B.bar и do a.foo = b. Это автоматически (эффективно) выполняет b.bar = a.

Теперь скажем, что вы [b delete]. При правиле "nullify" эффективно b.bar.foo = nil. С "каскадом" оно [b.bar delete]. Без "действия" он ничего не делает; a.foo теперь является "оборванной ссылкой на объект основных данных".

Это не настоящий оборванный указатель; стандартные правила управления памятью означают, что b будет по-прежнему существовать в памяти, пока a указывает на него (пока a не превратится в ошибку), но a.foo будет навсегда ссылаться на удаленный объект, что вызывает исключение, когда вы попробуйте получить доступ к его свойствам. Я не уверен, что происходит, когда вы сохраняете и повторно выбираете a.

С отношением "многие-ко-многим" он становится более сложным. Детали реализации: отношения, по-видимому, "принадлежат" одному из сущностей и сохраняются только тогда, когда этот объект сохраняется (я ударил эту ошибку при попытке установить отношения между разными MOC: MOC, который был сохранен, не принадлежал обновленный объект, поэтому отношения никогда не сохранялись). Очевидно, что когда вы удаляете как a, так и b, отношения также должны быть удалены, поэтому предполагается, что связь исчезает, только один из них удаляется (но вы не знаете, какой из них).


Вероятно, вам нужен Nullify или Cascade. Я никогда не использую Cascade, потому что я никогда не могу вспомнить, в каком направлении происходит каскадирование.

Ответ 2

Запретить Если в назначении отношения есть хотя бы один объект, то исходный объект не может быть удален. Например, если вы хотите удалить отдел, вы должны убедиться, что все сотрудники этого отдела сначала переданы в другое место (или уволены!), Иначе отдел не может быть удален.

аннулирует Установите обратную связь для объектов в точке назначения с нулевым значением. Например, если вы удалите отдел, установите для отдела все текущие члены равными нулю. Это имеет смысл только в том случае, если отношения отдела для сотрудника являются необязательными или если вы гарантируете, что вы установите новый отдел для каждого из сотрудников до следующей операции сохранения.

Каскад Удалите объекты в месте назначения. Например, если вы удалите отдел, одновременно увольте всех сотрудников в этом отделе.

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