Основные данные преобразовать экземпляр суперкласса в экземпляр подкласса? - PullRequest
3 голосов
/ 20 декабря 2011

Каков наилучший способ программного преобразования экземпляра NSManagedObject -подкласса (User) в экземпляр его подкласса (AccountUser)?

Настройка

AccountUserнаследуется от User: NSManagedObject

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

Оба User & AccountUser имеют атрибуты firstName, lastName и т. Д. AccountUser имеет некоторые дополнительные вещи, как accessToken.

Проблема

Мой друг Джон входит в систему на моем устройстве.Так как он мой друг, он уже хранится как User.Но теперь я хочу превратить его в AccountUser.Какой лучший способ сделать это программно?У меня есть много атрибутов и связей, которые необходимо сохранить, поэтому создание нового объекта AccountUser из объекта User и последующее удаление исходного объекта User - это очень много.Если я просто создаю AccountUser без удаления User, все становится грязно.Например, когда я получаю User по идентификатору, я получаю два объекта назад: один - AccountUser, другой - User.

Ответы [ 2 ]

6 голосов
/ 20 декабря 2011

Один из способов сделать это - просто создать новый объект AccountUser и скопировать в него соответствующие поля из существующего объекта User. Затем соответствующим образом разберитесь со старым объектом User - удалите его, сохраните все, что имеет смысл. Было бы целесообразно предоставить AccountUser инициализатор, который принимает экземпляр User, например -initWithUser:.

Другой (возможно, лучший) вариант будет включать использование одного класса (User) для всех пользователей. Если для некоторых пользователей (в настоящее время AccountUsers) необходимо сохранить дополнительную информацию, создайте новый класс Account и свяжите экземпляр Account с пользователями, которым это требуется. Таким образом, объекты User, которые представляют вас и вашего друга Джона, будут иметь связанные объекты Account, а все остальные пользователи - нет. Когда один из ваших друзей заходит на ваш телефон, вы можете создать новый объект Account для этого человека и связать его с существующим объектом User.

0 голосов
/ 20 декабря 2011

Может быть, вы можете сделать это так

  1. Добавьте сущность User булево свойство с именем "is_account_user".
  2. Установка отношений между пользователем и пользователем учетной записи.
  3. если у пользователя есть учетная запись, создайте сущность AcountUser и свяжите ее с пользователем.

Если у пользователя нет информации об учетной записи, то is_account_user будет NO;

Когда вы выбираете пользователя, вы можете проверить, является ли is_account_user значением YES, и если да, то вы можете получить его AcountUser со связью.

Надеюсь, это поможет

...