2016-09-12 3 views
2

Я пытаюсь читать CoreData из-за Шеззаде Extension (MSMessagesAppViewController), но так как нет AppDelegate там тоже нет managedContext.Шеззаде Расширение и CoreData

Есть ли идеи, если это возможно? Возможно ли создать экземпляр AppDelegate моего приложения или что-то в этом роде?

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

+0

Вам не нужно, чтобы делегат приложения использовал основные данные. Эти два совершенно не связаны. –

+0

@TomHarrington вы не возражаете, расширяя это, как ответ на вопрос? :) –

ответ

3

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

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

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

+0

Спасибо @TomHarrington, между тем я понимаю, что AppDelegate не требуется. Но для доступа к данным из расширения необходим контейнер AppGroup. –

+0

@KevinLieser true, но ваш вопрос задал вопрос о том, что делать, когда нет делегата приложения. Создание экземпляра делегата приложения, как вы сказали, не является правильным. –

+0

Правильно, спасибо за помощь! –

Смежные вопросы