2013-06-21 3 views
3

Итак, у меня есть приложение с несколькими классами NSManagedObject, и я хотел бы извлечь часть логики и поместить ее в автономный фреймворк, который будет использоваться в других приложениях.Основные данные и частные рамки

У меня есть класс, как, скажем:

Employee 
- firstName    (an MOM property) 
- lastName    (an MOM property) 
- (NSString *)fullName (a method) 
- (NSUInteger)daysHired (an ObjC property) 
- etc... 

Я хотел бы, чтобы обеспечить этот класс, и это определение MOM, в рамках. Я полагаю, что это возможно, добавив .mom в фреймворк, определяя Employee там, создавая hh и .m в классе. Когда я хочу повторно использовать этот класс, мне просто нужно включить его в сборку проекта, объединить .mom в рамках с .mom для приложения, и сущности будут доступны. Я полагаю?

Однако, я не вижу, как я могу взять подкласс класса def/NSManagedObject из фреймворка, а затем подкласс или расширить его в новом приложении. Чтобы установить отношения между моим приложением NSManagedObjects и абстрактными в структуре, мне пришлось бы подклассифицировать объекты фреймворка - я не вижу, как вы можете связать entites в одном MOM-файле с сущностями в другом MOM-файле, так как либо суперклассов, либо как направления отношений.

Мысли? Возможно ли предоставить MOM в рамках?

ответ

4

Это правда, что было бы неловко расширять сущность в скомпилированной модели управляемых объектов, точно по той причине, которую вы описываете. Как я вижу у вас есть несколько вариантов, в порядке убывания удобства:

  • включает в некомпилированном .xcdatamodel вместо скомпилированного .mom. Любой, у кого есть скомпилированная модель, может легко перепроектировать его, так что это не похоже на то, что дает дополнительную информацию. С помощью исходной модели суб-сущности могут создаваться, как обычно. Если вас беспокоит совместимость существующих сущностей, добавьте проверки во время выполнения, чтобы просмотреть Employee и убедитесь, что он выглядит так, как вы ожидаете (например, проверьте описание объекта versionHash). Если исходная модель фреймворка обновлена, изменения должны сглаживаться чисто - при условии, что вы используете формат файла Xcode 4 и выше для модели.
  • Создание сущностей в коде. В редакторе моделей нет ничего волшебного, все, что вы там делаете, также может быть сделано в коде. Создавайте и/или изменяйте объекты при первой загрузке модели, создавая и/или изменяя экземпляры NSEntityDescription, а затем вызывая setEntities на модели управляемого объекта. Просто убедитесь, что вы сделали это до, загружая постоянное хранилище, потому что после загрузки файла хранилища будет выдано исключение.
  • (в худшем случае) Создайте универсальный тип объекта хранения значения ключа в модели и дайте объекту Employee отношение ко многим ко многим. Затем вы можете добавить любые пары ключ/значение, которые вам нужны во время выполнения, не создавая новый субобъект.

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

+0

... и если этого недостаточно, чтобы «принять» и присудить полную награду, было бы неплохо, если бы вы хотя бы сказали, почему. –

+0

Cheeky hahaha. Хороший ответ, кстати. – Daniel

+0

Извините. Я, вероятно, собираюсь сделать второе. – iluvcapra