私はあなたの質問を理解したかどうか確信が持てませんが、 のインスタンスが 1 つしかないことを制御したい場合は、 type のプロパティを持つ、CurrentUser
一種のシングルトン クラスを設定します。SessionController
CurrentUser
したがって、そのプロパティはどこからでもアクセスでき、そのクラスの 1 つのインスタンスしか使用できないため、現在のユーザーは 1 つのプロパティしか使用できないことがわかります。
CurrentUser* cu = [[SessionController sharedSessionController] currentUser];
if(!cu) // allowed
else // not allowed
ログイン(または他の何か)すると、そのプロパティに値が設定されます。ログアウトするときは、nil に設定します。別のユーザーと一緒に入力する場合は、そのプロパティに対してチェックできます。これは、ほとんどの場合に機能する単純なアプローチです。
User
あなたの質問について、エンティティをサブクラス化した理由がよくわかりません。しかし、それには何らかの動機があるのかもしれません。サブクラスを扱うときは注意してください。実際、内部では、sqlite ストレージを使用すると、作成したサブクラスが Core Data によってフラット化されます。したがって、あなたの場合、 でUser
作成した属性を持つテーブルしかありませんCurrentUser
。
編集
質問のタイトルを読んで、制御を db ファイルで行う必要がある場合は、というエンティティを作成し、LoggedUser
サブクラスの使用を避けます。
ここに、現在のユーザーの ID と必要なその他のプロパティを格納できます。
次に、すでにログインしているユーザーが 1 人いるかどうかを確認する場合は、次のような要求を簡単に設定できます。
NSInteger count = [fetchRequest countForFetchRequest:&error]; // query against `LoggedUser`
if(count >= 1) // not allowed
else // allowed