1

質問があります:)私は、いくつかのオブジェクト(本によると)とユーザーのリストを持っている場合によく出くわします。各ユーザーは何冊かの本を持っています。現在ログインしているユーザーが通常のユーザーよりも多くの属性(投稿権、お気に入りなど)を持っているという特殊なケースもあります。

以前のすべてのプロジェクトで、CurrentUser という User のサブクラスを作成し、そこに現在のユーザー属性/ロジックを追加しています (たとえば、通常のユーザーはログアウトできません)。しかし、CurrentUser オブジェクトが 1 つしか存在しないようにするという問題に常に遭遇します。

他の人はこれをどのように行っていますか?そして、私はこれを正しくやっていますか?

4

1 に答える 1

0

私はあなたの質問を理解したかどうか確信が持てませんが、 のインスタンスが 1 つしかないことを制御したい場合は、 type のプロパティを持つ、CurrentUser一種のシングルトン クラスを設定します。SessionControllerCurrentUser

したがって、そのプロパティはどこからでもアクセスでき、そのクラスの 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
于 2012-06-07T14:36:12.223 に答える