Расширение iMessage и CoreData

Я пытаюсь прочитать CoreData из расширения iMessage (MSMessagesAppViewController), но, поскольку AppDelegate отсутствует, также нет managedContext.

Кто-нибудь знает, возможно ли это? Можно ли «создать экземпляр AppDelegate» моего приложения или что-то в этом роде?

Обновление. Как получить доступ к основным данным в приложении и в расширении. Решением для этого является использование контейнера AppGroup.


person Kevin Lieser    schedule 12.09.2016    source источник
comment
Вам не нужно иметь делегата приложения для использования Core Data. Эти двое совершенно не связаны.   -  person Tom Harrington    schedule 13.09.2016
comment
@TomHarrington, не могли бы вы расширить это в качестве ответа на вопрос? :)   -  person Tom Roggero    schedule 22.09.2016


Ответы (1)


Использование Core Data не имеет ничего общего с наличием делегата приложения. Это две отдельные вещи. Вы можете собрать их вместе, но ни Core Data, ни делегат приложения этого не требуют. Это даже не очень хороший дизайн для этого. Задача делегата приложения состоит в том, чтобы реагировать на события жизненного цикла приложения, такие как запуск, переход в фоновый режим и т. д., и это плохой дизайн, чтобы также смешивать отдельную работу по управлению данными приложения.

Если вы создадите новый проект в Xcode и установите флажок «использовать основные данные», Xcode включит методы в класс делегата приложения для настройки базовых данных для приложения. Но этот код можно использовать в любом классе. Нет ничего особенного в делегате приложения, который требует, чтобы этот код находился в этом классе. Тот факт, что Xcode помещает этот код в этот класс, не означает, что необходимо делать это таким образом. Если вам нужно использовать Core Data в расширении приложения, это то, что вы сделаете.

Одним из распространенных подходов является создание нового класса для управления Core Data. Поместите весь код управления стеком Core Data туда, а не в делегат приложения. Делегат приложения может создать экземпляр этого класса в вашем приложении. В расширении приложения класс может быть создан везде, где это необходимо для типа расширения.

person Tom Harrington    schedule 22.09.2016
comment
Спасибо @TomHarrington, тем временем я понимаю, что AppDelegate не нужен. Но для доступа к данным из расширения необходим контейнер AppGroup. - person Kevin Lieser; 22.09.2016
comment
@KevinLieser верно, но ваш вопрос конкретно касался того, что делать, когда нет делегата приложения. Создание экземпляра делегата приложения, как вы предложили, не является правильным подходом. - person Tom Harrington; 22.09.2016
comment
@TomHarrington, хорошо, поэтому я столкнулся с немного похожей проблемой. Я бы не хотел использовать раскадровку для приложения iMessage. Как мне создать экземпляр контроллера представления или, скорее, окна? - person Shyam; 28.06.2017
comment
@Shyam, это другой вопрос, чем заданный здесь. Лучше задать новый вопрос, который более полно описывает вашу ситуацию. - person Tom Harrington; 28.06.2017
comment
@TomHarrington, кажется, я нашел способ. Позвольте мне попробовать, если это работает, как ожидалось. Но, спасибо, что нашли время ответить. :) - person Shyam; 28.06.2017