Xcode 3.2.1 - Почему базовые данные генерируют классы, приводящие к ошибкам сборки? - PullRequest
6 голосов
/ 11 октября 2009

Похоже, что в недавнем Xcode 3.2 добавлены некоторые тонкости генерации кода, которых (я думаю) не хватало до Snow Leopard.

Я предпринял следующие шаги:

  1. Определить простую модель .xcdatamodel с несколькими сущностями, включая одну (обратимую), одну: множество (у Endpoint есть много Subscription объектов)

  2. Файл -> Новый и выберите (без значка) «Класс управляемых объектов». Из этого волшебника я выбрал свои классы и отправился в гонки.

  3. Пока я не попытался построить. Я получаю этот результат и не могу понять:

неопределенные символы: "_OBJC_METACLASS _ $ _ NSManagedObject", на который ссылаются из: _OBJC_METACLASS _ $ _ Подписка в Subscription-B5BE258DF28BC03B.o _OBJC_METACLASS _ $ _ Конечная точка в Endpoint.o "_OBJC_CLASS _ $ _ NSManagedObject", на который ссылаются из: _OBJC_CLASS _ $ _ Подписка в Subscription-B5BE258DF28BC03B.o _OBJC_CLASS _ $ _ Конечная точка в Endpoint.o ld: символ (ы) не найден collect2: ld вернул 1 статус выхода

С чем бы я хотел помочь:

  1. Если у кого-то есть идеи о том, что я только что сделал неправильно, это было бы замечательно.

  2. Похоже, что единственный способ заставить XCode * заново * сгенерировать ваши классы - это File -> New и заменить их снова, что (среди прочего) приводит к дублированию ссылок на новые классы и ваши старые файлы классов бесполезно оставляются в удаленной папке в вашем проекте. Кто-нибудь знает, как правильно синхронизировать их? Я не нашел ни одной документации Apple, в которой описан новый материал.

Ответы [ 2 ]

25 голосов
/ 12 октября 2009

Вы добавили CoreData.framework в свой проект (или случайно удалили его)? Это может быть источником ошибки компоновки.

Кроме того, я рекомендую вам проверить MOGenerator, Wolf Rentsch. Это очень более мощный генератор кода для основных классов данных, который использует шаблон промежутка генерации. Он может автоматически восстанавливать классы каждый раз, когда вы сохраняете xcdatamodel, сохраняя свой собственный код.

9 голосов
/ 06 сентября 2010

Самый простой (и самый частый, и самый простой для понимания) способ, которым это происходит, - это если вы случайно сгенерируете новый набор классов MOC, не удаляя ссылки на старые (возможно, в другой группе в вашем проекте или что-то в этом роде). Я просто слишком долго стучал головой об XCode, прежде чем понял, что это именно то, что я сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...