2016-07-12 1 views
0

Я изо всех сил пытаюсь понять, как построить модель Core Data для поддержки структуры классов, которую я создал в своем приложении.Как настроить мою модель Core Data, когда мои объекты имеют произвольные данные свойств?

У моего приложения есть пользователи, и я разрешаю этим пользователям регистрироваться в приложении, используя несколько разных методов проверки подлинности. Для каждого метода аутентификации требуются несколько разные учетные данные и типы кредитов. Я решил решить эту проблему путем создания абстрактной AuthenticationSettings базового класса, а затем подкласс с FacebookAuthenticationSettings, TwitterAuthenticationSettings, MyWebsiteAuthenticationSettings и т.д.

Мой User класс имеет свойство authSettings (типа AuthenticationSettings), который хранит экземпляр одного классов настроек. Пользователям разрешен только один метод auth для каждого пользователя, поэтому это отлично работает.

Вопрос в том, как мне создать модель Core Data для моих пользователей, учитывая, что authSettings может иметь один из многих типов объектов, хранящихся в нем?

  • Я могу создать отдельные объекты для каждого типа аутентификации, а затем создать отношения между этими объектами и пользовательским объектом? Это странно, потому что модель данных не применяет для пользователя 1: 1 метод auth. Когда вы выбираете пользователей, мне также нужно будет использовать их соответствующие методы auth.

  • Я просто создаю свою собственную сериализующую кодировку для аутентификаторов и застревает ее в поле строки на пользовательском объекте? Это заставляет меня изобретать некоторую кодировку, которая кажется особенно беспорядочной, если любые будущие методы auth используют поля, которые сложно сериализовать в строку.

  • Есть ли лучший способ?

ответ

2

Один из способов - создать иерархию объектов Core Data, которая будет параллельна вашей иерархии классов. Создайте абстрактный объект в Core Data с именем AuthenticationSettings и создайте серию субингументов для каждого типа проверки подлинности. Как и для вашего свойства User, создайте связь с AuthenticationSettings.

Простой подход, который звучит так, будет соответствовать вашим потребностям, заключался бы в том, чтобы ваши различные классы аутентификации соответствовали NSCoding, а затем просто сохранили их в одном поле «трансформируемое» (не строковое) на пользовательском объекте. Core Data затем автоматически преобразует объект аутентификации в/из NSData.

+0

Отлично! Я не знал о Трансформируемом типе. –

+0

В этом случае я бы держался подальше от трансформаторов. Они предназначены для пользовательских типов данных, таких как местоположения (пары координат) или некоторые другие неклассифицированные структуры. Если метод аутентификации моделируется как отдельный тип объекта, он должен быть отражен в Core Data. – Avi

+0

@ Ави не уверен, что вы получаете. Это точная ситуация, для которой были созданы трансформаторы. Трансформируемые атрибуты работают только на объектах, которые соответствуют «NSCoding», поэтому «неклассирование» не имеет смысла. –

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