iOSには実際に複数のユーザーの概念がないため、「ログイン」の範囲がアプリに限定されます。最も簡単な解決策は、各ユーザーの永続ストアに異なるファイル名を使用することです。これは、(コアデータスタックを設定している)どこにでも派生するため、実装するのはかなり簡単です。
標準のコアデータテンプレートでは、永続ストアの場所は、アプリケーションデリゲートのpersistentStoreCoordinator
メソッド内で設定されます。これは、この行です:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"coreDataTemplate.sqlite"];
これは基本的にデータはドキュメントディレクトリ内のsqliteデータベースファイルに保存され、ファイルがcoreDataTemplate.sqlite
と呼ばれることを意味します。
このコードが実行される前に、ユーザーログオンを行い、ユーザーIDをいくつかのリストと照合して、それらに固有のIDを提示したとします。さらに、識別子がユーザのデフォルト値に格納されていると仮定します。
変更上記の行に:
NSString *userIdentifier = [[NSUserDefaults standardUserDefaults] stringForKey:@"loggedOnUserID"];
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:[NSString stringWithFormat:@"%@_coreDataTemplate.sqlite",userIdentifier]];
これが今、あなたのユーザーのためのユニークなファイル名を与えます。
ユーザを変更する場合は、現在の管理オブジェクトコンテキストを保存してから、アプリケーションデリゲートの永続ストアコーディネータと管理オブジェクトコンテキストをnilに戻す必要があります。再アクセスされると、新しいユーザーIDの下に置かれます。
私はxCodeコアデータテンプレートを使用していますので、どこでどのように別のファイル名を使用するのか分かりませんが、非常に良い解決策のように聞こえます。永続的なストアをリセットし、別のファイル名でロードする方法を教えてください。 – Eyal
しますが、数時間かかることはありません。 – jrturton
ありがとう、私はお待ちしております:) – Eyal