#ios #objective-c #core-data #swift #magicalrecord
#iOS #objective-c #основные данные #swift #magicalrecord
Вопрос:
В моей базовой модели данных у меня есть объекты с префиксом ICD_ . Для каждой сущности у меня есть подкласс с префиксом CD_ . Подклассы с префиксом CD_ реализуют только статические методы получения.
Когда я создаю объект с помощью MagicalRecord, я должен использовать класс с префиксом ICD_, а не с CD_ . В противном случае у меня есть SIGABRT:
» entityForName: не удалось найти объект с именем ‘CD_User’ в этой модели».
Если я уменьшу свой объект ICD_ до моего CD_Entity, он будет работать в Objective-C. То же самое в Swift вызывает SIGABRT. Это вполне естественно, потому что выделяется родительский объект, а не дочерний класс, поэтому обычно его невозможно удалить.
Итак, я ищу решение, которое позволяет использовать мои подклассы с префиксом CD_ с MagicalRecord .
Комментарии:
1. Если ваши
CD_*
подклассы реализуют статические геттеры и ничего больше, тогда зачем вам вообще нужно уменьшать?2. Я согласен с вами, в Objective-C это работает, но в Swift это вызывает SIGABRT.
3. Это звучит как ошибка в Obj-C, тогда как Swift обрабатывает ее правильно.
4. Попробуйте использовать категории вместо подкласса для расширения ваших объектов.
5. Нет, если вы сохраняете категорию в отдельном исходном файле.
Ответ №1:
Либо ваша модель данных загружена неправильно, либо вы используете неправильное имя для доступа к объектам. Вы можете увидеть, какие имена содержит ваша модель данных, используя метод -entitiesByName в NSManagedObjectModel
Комментарии:
1. Я знаю, что мои объекты в базовой модели данных имеют имена с префиксом ICD_. Например , ICD_User, ICD_Basket и так далее… Для каждого из этих объектов у меня есть подклассы с префиксом CD_ . Например: CD_User , CD_Basket . Чтобы создать объект с помощью MagicalRecord, я должен вызвать метод
MR_createEntity
с классами с префиксом ICD_ . Но я хотел бы создать экземпляры классов CD_ вместо классов ICD_. Как я могу это сделать с помощью MagicalRecord?2. Поэтому я думаю, мне не нужно использовать
-entitiesByName
метод.