Проект Xcode с общими CoreData для iOS и MacOS - PullRequest
0 голосов
/ 13 ноября 2018

Несколько месяцев назад я начал работать над приложением MacOS, для которого требовалась реализация CoreData.Сегодня я начинаю работать над связанным приложением iOS, которое основано на том же Api, и хотя опирается на ту же модель.Я добавил свою цель iOS в свой проект и объединил некоторые классы (добавив их в обе цели), включая стек CoreData:

  1. Я добавил свои app.xcdatamodeld на обе цели

  2. Я добавил свои Object+CoreDataClass.swift & Object+CoreDataProperties.swift на обе цели

enter image description here

Я изменил свой ManagedObjectsController для поддержки реализации iOS и MacOS

enter image description here

, определив appDelegate для iOS иOSX, я могу получить к нему доступ таким же образом, чтобы получить свой контекст let context = appDelegate.persistentContainer.viewContext

Он работает нормально, но Мне было интересно, правильно ли я делаю .Это правильный способ для взаимного доступа к экземплярам appDelegate между двумя целями?

Должен ли я использовать какой-нибудь протокол и общий набор текста?

Или мне просто создать ManagedObjectController для каждой цели?

Спасибо

1 Ответ

0 голосов
/ 14 ноября 2018

Объявление протокола помогает, если у вас есть несколько классов, которые вы хотите, чтобы оба поддерживали общие функции.Но в этом случае UIApplication и NSApplication уже поддерживают необходимые вам общие функции!Проблема в том, что вам нужен доступ к двум разным глобальным символам.

Один альтернативный вариант, который стоит рассмотреть: вместо объявления двух классов IosAppDelegate и MacAppDelegate , объявите один класс AppDelegate и переместите этот грязный код #if из вашего ManagedObjectsController класса в AppDelegate .Затем этот AppDelegate можно использовать везде, где вам нужна ссылка на делегата общего приложения.Это больше, чем несколько мест в большинстве проектов.

Но если вы хотите вывести свой продукт как можно скорее, и этот ManagedObjectsController - единственное место, где вам нужен делегат общего приложения,ваш код в порядке.

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