Использование основных данных для хранения пользовательских объектов

У меня есть вопрос:) Я часто сталкиваюсь со случаем, когда у меня есть некоторые объекты (говорят книги) и список пользователей. У каждого пользователя есть несколько книг. Существует также особый случай вошедшего в систему пользователя, который имеет больше атрибутов, чем обычный пользователь (права публикации, избранное) и т. Д.

Во всех предыдущих проектах я создавал подкласс User с именем CurrentUser и добавлял туда атрибуты / логику текущего пользователя (обычный пользователь не может выйти, например). Но я всегда сталкиваюсь с проблемой обеспечения существования только одного объекта CurrentUser.

Как другие люди делают это? И правильно ли я это делаю?

1 ответ

Решение

Я не совсем уверен, что понял ваш вопрос, но если вы хотите контролировать, что есть только один случай CurrentUser Я создам своего рода синглтон класс, скажем, SessionController, который имеет свойство типа CurrentUser,

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

CurrentUser* cu = [[SessionController sharedSessionController] currentUser];
if(!cu) // allowed
else // not allowed

Когда вы входите (или что-то еще), вы заполняете это свойство. Когда вы выходите из системы, вы устанавливаете ноль. Если вы хотите войти с другим пользователем, вы можете проверить это свойство. Это простой подход, который может работать в большинстве случаев.

Что касается вашего вопроса, я не совсем уверен, почему вы подкласс User юридическое лицо. Но, возможно, есть некоторые мотивы для этого. Обратите внимание, когда вы имеете дело с подклассами. В сущности, если вы используете хранилище sqlite, Core Data делает сведенный созданный вами подкласс. Итак, в вашем случае у вас есть только User таблица с атрибутами, которые вы создали в CurrentUser,

РЕДАКТИРОВАТЬ

Читая заголовок вашего вопроса, если контроль должен выполняться с помощью файла db, я бы создал сущность с именем LoggedUser и избегайте использования подкласса.

Здесь вы можете сохранить идентификатор вашего текущего пользователя и другие свойства, которые вы хотите.

Затем, если вы хотите проверить, есть ли один пользователь, который уже вошел в систему, вы можете просто настроить запрос следующим образом:

NSInteger count = [fetchRequest countForFetchRequest:&error]; // query against `LoggedUser`
if(count >= 1) // not allowed
else // allowed
Другие вопросы по тегам