Я не уверен, что я понял ваш вопрос, но если вы хотите контролировать, что есть только один экземпляр CurrentUser
я создам свой родом одноплодного класса, скажу SessionController
, что имеет свойство типа CurrentUser
.
Таким образом, вы можете получить доступ к этому свойству в любом месте, и знаете, что он доступен только одному экземпляру этого класса и, следовательно, только одному свойству для вашего текущего пользователя.
CurrentUser* cu = [[SessionController sharedSessionController] currentUser];
if(!cu) // allowed
else // not allowed
Когда вы входите в систему (или что-то еще), вы заполняете это свойство. Когда вы выходите из системы, вы устанавливаете его на нуль. Когда вы хотите ввести другой пользователь, вы можете проверить это свойство. Это простой подход, который может работать в большинстве случаев.
О вашем вопросе, я не совсем уверен, почему вы подклассифицировали объект User
. Но, возможно, для этого есть некоторые мотивы. Обратите внимание, когда вы занимаетесь подклассами. Под капотом, фактически, если вы используете хранилище sqlite, Core Data сглаживает созданный подкласс. Итак, в вашем случае у вас есть таблица User
, у которой есть атрибуты, созданные вами в CurrentUser
.
EDIT
Чтение названия вашего вопроса, если управление должно быть сделано с файлом БД, я хотел бы создать объект под названием LoggedUser
и избегать использования подкласса.
Здесь Вы можете сохранить идентификатор для своего текущего пользователя и других объектов, которые вы хотите.
Затем, если вы хотите, чтобы проверить, есть ли один пользователь, который уже зарегистрирован, вы можете просто создать запрос, как следующее:
NSInteger count = [fetchRequest countForFetchRequest:&error]; // query against `LoggedUser`
if(count >= 1) // not allowed
else // allowed
Хорошо, я собираюсь с решением поставленных в вашем РЕДАКТИРОВАТЬ. Я также заметил проблему подклассификации. Кто-нибудь знает, эффективнее ли CoreData с плоскими базами данных или с такими базами данных с несколькими выводами? Я знаю, на Android я всегда стремимся к плоской базе данных для скорости ... –
Это зависит. Если вы используете multi-table dbs, вам нужно сделать больше работы по извлечению данных из другой таблицы. Напротив, когда вы используете плоские, вы можете иметь в памяти дополнительные свойства, которые не подходят для вашего приложения. Отметьте как ответ и/или обновите, если хотите. Приветствия. –
Делает смысл. Да, я это отмечаю, я отмечаю это :) –