Я до сих пор не понимаю, для чего предназначен подкласс NSManagedObject - какую роль он играет?
Удобство для разработчика - с точки зрения CodeSense, более короткого синтаксиса и некоторой компиляциивремя проверки, которые помогают предотвратить неправильное написание ключей.
так что я могу сделать с NSManagedObject?Каковы ограничения, правила, которые необходимо соблюдать, а какие нет?
Интерфейс, встроенный в Xcode, сделает для вас подклассы NSManagedObject - вам действительно не нужно делать это вручную- но, по сути, они просто NSManagedObject
с некоторыми привязанными свойствами.Вместо использования @synthesize
или чего-то подобного, вы используете @dynamic
, и Apple позаботится обо всем остальном - подключив эти свойства к получателям / установщикам, которые имитируют то, что вы обычно делаете с «голым» NSManagedObject
.
Я пытаюсь создать небольшую программу для рисования коробок для изучения Core Data, и я думаю о добавлении методов «рисования» в подкласс NSManagedObject, чтобы представление могло просто сказать им рисовать длясамо по себе - это разрешено?
Вы могли бы ... но я бы не стал.Это звучит как плохой дизайн - старайтесь держать ваши Model и Controllers отдельно.
Объекты модели не должны содержать бизнес-логики / кода для рисования.Используйте модель просто как «состояние» вашего приложения.Сделайте что-нибудь еще ответственным за рисунок.Кроме того, хотя я не могу сказать это с абсолютной властью, я считаю, что есть некоторые издержки, если вы имеете дело с обновлением / извлечением информации из NSManagedObject
.
( По сути, это все равно, что иметь дело с NSDictionary
... sorta. Менее эффективно извлекать элементы из словаря, чем обращаться к ivar
. )
Для приложения, которое выполняет такие вещи, как рисование - вы, вероятно, захотите избежать этих накладных расходов, создав структуру для ваших вещей в памяти и, возможно, вторую, аналогичную структуру для постоянства / сериализации (как в CoreData).
Итак, мой вопрос в одном предложении: какова "реальная" разница между подклассом NSManagedObject и любым другим классом - что Core Data делает с ним?
Я бы сказал - не делайте подкласс NSManagedObject вручную - используйте то, что дает вам Xcode.Если вам нужно больше (кроме, возможно, собственного конструктора), то вы, вероятно, лаете не на то дерево.
РЕДАКТИРОВАТЬ:
Я думаю, что, возможно, были некоторыепутаница в том, что я имел в виду, когда сказал «не делайте подкласса NSManagedObject вручную»
Чтобы уточнить и включить один из ответов:
Начните сконструктор моделей данных в Xcode, создайте свои модели и используйте следующую опцию меню:
Затем вы можете изменить сгенерированный класс, добавив в него пользовательский:
- Конструкторы
- Методы преобразования данных
- Проверка
- Форматирование
- Дескрипторы сортировки
- Фильтры
Если ваш вариант использования не помещается в этот список, вам следует серьезно подумать о том, чтобы поместить его в другое место (как в вашем примере с методом Draw).
Все эти вещи, упомянутые выше, могут быть привязаны к подклассу NSManagedObject, который был создан для нас XCode (мы не создавали «вручную»), - и все они вращаются вокруг работы с данными напрямую (форматы / преобразования / и т. д.) и / или извлечение данных из базовых данных (фильтры / сортировка).
Они не добавляют iVars, они не выполняют каких-либо сложных операций вне области хранения и поиска данных.