2014-08-11 2 views
1

Я строю расширение представления времени (виджет), которое нужно обмениваться данными с его содержащим приложением. Я использую сильно основные данные в содержащем приложении, поэтому я хотел бы использовать Core Data как способ совместного использования общей базы данных между обеими программами. Это означает, что мне нужно знать модель объекта и все классы модели в коде виджета.Использование модели основных данных в расширении виджета/сегодня?

В руководстве по программированию расширения приложений Apple говорит, что мы должны использовать инкапсулирующий код в Frameworks, чтобы разделить его между содержащимся приложением и виджетами. Но в руководстве по программированию Framework явно написано, что Frameworks следует создавать только для инкапсуляции кода, который не является специфичным для приложения, но должен инкапсулировать код, который может быть повторно использован универсальным.

Так что мои вопросы:

  • строит структуру, заключающую все мои классы модели + мои объект модель данных графы ядра является хорошим способом обмена бизнеса-логики между содержащим приложением и виджетом?
  • Как бы вы включили целую модель данных ядра в структуру, поскольку рамки, похоже, не предназначены для этого?

ответ

2

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

Я не уверен, что вы подразумеваете под «рамки, похоже, не предназначены для этого» в вашем втором вопросе. Рамки - это еще одна цель, вы должны иметь возможность создавать файл модели Core Data, чье целевое членство является вашим фреймворком. Затем вы можете использовать некоторый метод более высокого уровня в API фреймворка, который возвращает NSManagedObjectContext на основе модели, включенной в структуру.

Вам также потребуется настроить группу приложений для вашего основного файла хранилища (обычно это ваш файл sqlite). Чтобы ваше приложение Widget and Containing могло читать и писать в тот же файл, этот файл должен находиться в группе приложений, на которую есть права.