Правильная конфигурация для использования одного и того же хранилища основных данных в одном проекте с использованием Swift и ObjC - PullRequest
0 голосов
/ 13 апреля 2019

Я создаю приложение, в котором есть компоненты, встроенные как в Swift, так и в Objective C. В частности, основной контроллер представления встроен в Swift.Действия UX инициируют переходы к одному или нескольким вторичным контроллерам представления, которые реализуют функции в коде, написанном в Objective C.

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

Что я наделал?

Базовые данные правильно реализованы в AppDelegate.swift, а объекты инициализированы в didFinishLaunchingWithOptions.Написан код Swift, который может обращаться к этим объектам, используя их для заполнения UX в основном контроллере представления.

В дополнительном контроллере представления, который написан в Objective C (файл .mm), когда я пытаюсь объявить NSManagedObject Context, используя

NSManagedObjectContext *context = ((AppDelegate*)[[UIApplication sharedApplication] delegate]).persistentContainer.viewContext;

, я получаю ошибки, что нет persistentContainer,Это кажется распространенным, так как я нашел вопросы по этому поводу в iOS CoreData не может получить свойство, используя target-c и Добавление CoreData в существующий проект с использованием Objective-C .Обе эти публикации содержат в основном один и тот же учебник с примером кода для AppDelegate.h / AppDelegate.m, который необходимо добавить в проект.

Когда я реализую их, ошибки persistentContainer исчезают, но появляются новые ошибки:

error: Multiple commands produce '/Users/malcolm/Library/Developer/Xcode/DerivedData/Train_Domino_Point_Counter-dttawwfxusobpxaspatqksxjtlku/Build/Intermediates.noindex/Train Domino Point Counter.build/Debug-iphonesimulator/Train Domino Point Counter.build/Objects-normal/x86_64/Score+CoreDataProperties.o':
1) Target 'Train Domino Point Counter' (project 'Train Domino Point Counter') has compile command for Swift source files
2) Target 'Train Domino Point Counter' (project 'Train Domino Point Counter') has compile command for Swift source files

При исследовании этой ошибки был получен комментарий в Ошибка Xcode 10: несколько команд выдают констатацию

"Если вы видите эту ошибку по отношению к Базовым данным, это вероятно потому, что вы вызвали« Создать NSManagedObject Subclass », но ваш Entity установлен в Codegen =« Определение класса ». Это означает, что это автоматическисоздавая эти классы для вас, и вы создали их вручную, чтобы они существовали дважды ".

Поскольку эти ошибки появились, когда я реализовал ObjC AppDelegate.h и AppDelegate.mm, согласно приведенному выше руководству, я предполагаю, что это как-то создает дублирующие объекты, и это является источником ошибок сборки, так какв отличие от некоторой проблемы XCode.

В этот момент вы должны спросить - почему я не принимаю эти ошибки и не записываю их в качестве комментариев на упомянутых выше страницах StackOverflow - ответ просто состоит в том, что у меня нет требуемого статусакомментировать, поэтому я пользуюсь возможностью, чтобы определить основной вопрос «с нуля», а именно:

Корень всего этого в том, что я не могу найти учебник или набор инструкций, написанных с определенной цельюописания того, как настроить хранилище управляемых объектов Core Data, чтобы я мог использовать его из отдельных контроллеров представления, написанных на Swift и ObjC, существующих в одном проекте.Спрашивается здесь для тех, кто знает об этом больше, чем я, чтобы предоставить или указать на пошаговое руководство x step или репозиторий GitHub, который содержит примерный код, показывающий отдельные файлы и их содержимое, необходимые для доступа контроллеров представления, написанных на Swift и ObjC.все те же управляемые объекты Core Data.

Любое руководство с благодарностью получено.

...