iOS には実際には複数ユーザーの概念がないため、「ログイン」の範囲はアプリに限定されます。最も簡単な解決策は、各ユーザーの永続ストアに異なるファイル名を使用することです。これは 1 か所 (コア データ スタックを設定する場所) でのみ派生されるため、実装は非常に簡単です。
標準のコア データ テンプレートでは、永続ストアの場所はpersistentStoreCoordinator
アプリケーション デリゲートのメソッド内で設定されます。それはこの行です:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"coreDataTemplate.sqlite"];
これは基本的に、データがドキュメント ディレクトリの sqlite データベース ファイルに格納され、ファイルが .xml という名前になることを意味しますcoreDataTemplate.sqlite
。
このコードが実行される前に、ユーザーをログオンさせ、ユーザー ID を何らかのリストと照合して、一意の識別子を見つけたと仮定します。さらに、識別子がユーザーのデフォルトに格納されているとします。
上記の行を次のように変更します。
NSString *userIdentifier = [[NSUserDefaults standardUserDefaults] stringForKey:@"loggedOnUserID"];
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@_coreDataTemplate.sqlite",userIdentifier]];
これで、ユーザーに一意のファイル名が付けられます。
ユーザーを変更する場合は、現在の管理対象オブジェクト コンテキストを保存してから、アプリ デリゲートの永続ストア コーディネーターと管理対象オブジェクト コンテキストを nil に戻す必要があります。再アクセスされると、新しいユーザー ID の下になります。