ログインアプリを設計しました。sqlite データベースにアカウント データを入力しました。ただし、アカウントのユーザー名とパスワードでログインすると、これらにすべてのView Controllerがアクセスできるようになります。なぜなら、アカウントの詳細を更新するさまざまなコントローラーがあるからです。実装の詳細が必要..ありがとう
5 に答える
シングルトンを使用する: http://www.galloway.me.uk/tutorials/singleton-classes/
次のようなプロジェクトがあります (データベースではなく iOS キーチェーンを使用していることに注意してください。ただし、ここではそれらの詳細を非表示にしています)。
@interface User : NSObject
@property (nonatomic, strong) NSString *username;
+ (User *)currentUser;
@end
@implementation User
+ (User *)currentUser
{
static User *currentUser = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
currentUser = [[User alloc] initFromKeychain];
});
return currentUser;
}
@end
シングルトンを実行する方法はたくさんあります (誰かがあなたのクラスのシングルトンではないインスタンスを作成できるかどうかについて、あなたがどれだけ偏執的になりたいかによって異なります)。ここに例を示します:私の Objective-C シングルトンはどのように見えるべきですか?
また、必要な場所でキーチェーンに直接アクセスすることもできます。また、コードの多くがユーザー名/パスワードへのアクセスを必要とする理由を自問する必要があります。壊れたデザインのように聞こえます。
アプリケーション全体の資格情報を格納するために Singleton クラスを使用する代わりに、グローバル変数を避けてください。
ただし、資格情報をアプリに保存する最善の方法は Apple キーチェーンを使用することです。Apple サイトで API リファレンスを見つけることができます。
言われたように - グローバル変数は避けてください。
この変数を 1 つのファイルで定義する
他のすべてのファイルでは、extern
キーワードでそれを参照します
3 つの答え:
- やらないでください。
- やむを得ない場合は、Singleton を使用してください。
- ユーザー名と非機密 (つまり、パスワード) 変数に非常に簡単にアクセスするには、NSUserDefaults を使用します。