Может ли быть неисправен управляемый объект с неуправляемыми свойствами?


В документации по основным данным говорится, что объекты могут ошибаться, чтобы сохранить память, если это необходимо. Что произойдет, если у объекта есть свойство, которое не является управляемым свойством?

Например, предположим, что у вас есть класс отдела, то есть подкласс NSManagedObject. Он имеет расположение Ивар + аксессоры. Свойство location не является атрибутом подразделения; оно не управляется и никогда не сохраняется.

Если у вас есть массив объектов отдела или объект сотрудника с отношением к одному отношение к отделу, возможно ли, чтобы отдел когда-либо ошибался? Если вы установите отдел.местоположение, можете ли вы быть уверены, что местоположение всегда будет там, или возможно, что отдел ошибется, и тогда вы потеряете значение, хранящееся в местоположении?

2 2

2 ответа:

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

Когда вы реализуете переходное свойство, вы предоставляете хранилище (или вычисление), необходимое для предоставления значения для этого свойства.

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

Я бы не доверял неуправляемым данным оставаться там. Даже если это произойдет сейчас, поведение может измениться в будущем. Более того, с архитектурной точки зрения я бы вообще не рекомендовал хранить неуправляемые данные в управляемом объекте. Тебе же лучше:

  1. создание управляемых данных, или
  2. делает неуправляемые данные вычислимыми из управляемых данных, или
  3. создание объекта, который имеет неуправляемые данные и отдел как Иварс.