PHP/MySQL API と対話する小さなアプリケーションを構築して、obj-c を学習するプロジェクトに取り組んでいます。
ユーザーが何かを行うたびに、このユーザーに新しい認証キーが設定され、クライアントに送信されます。クライアントはこの値を受け取り、NSUserDefaults に設定する必要があります。これは、プログラムが起動するたびにユーザーがログオンできないようにするためです。このキーが存在する場合、このキーで認証を試みてから、自動的にログインします。
これは時々機能します...受信用と設定用の2つの機能があります。それらは次のようになります。
//GET
-(NSString*)GetValue:(NSString *)Name
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *get = [prefs stringForKey:Name];
if(get)
return get;
else
return FALSE;
}
//SET
-(void)SetValue:(NSString*)Name:(NSString*)Value
{
//Add new...
[[NSUserDefaults standardUserDefaults] setObject:Value forKey:Name];
}
これはほとんど機能します。
問題は次のようなものです。
1) auth-key 値が設定されていません (NSUserDefaults で)
2) ユーザーをログインしようとすると、値が設定され (「aaaaaaaaaaaaaaa」など)、すべて問題ありません。プログラムを再起動すると、この保存された値が取得され、ログインが試行され、PHP から肯定的な結果が返され、回答が返されたときに設定する必要がある新しいキーが返されます...このように...
if(NewKey.length > 0)
{
NSLog(@"TRY SET KEY: %@", NewKey);
[self SetValue:@"auth_key":NewKey];
NSLog(@"TRY GET KEY: %@", [self GetValue:@"auth_key"]);
}
3) 上記の NSLog には、「TRY SET KEY: bbbbbbbbbbbbbbbb」および「TRY GET KEY: bbbbbbbbbbbbbbbb」と表示されます。完璧に見えます!
4) プログラムを強制終了して再試行すると、「bbb...」が保存されているはずですよね? 違う!この値を NSLogs すると、まだ "aaa..."
です。値が格納されます。しかし、そうではありません...
6) プログラムを強制終了し、再起動すると、"aaa..." が表示されます。
7) プログラムを強制終了します。AppDelegate で、この値を (同じ関数で) 好きな "xxx" に手動で設定します。プログラムを実行すると、キーが「xx」などに設定されます。この行を削除し、プログラムを再起動すると、「xxx」が適切に保存され、#2 に戻りました。1回のログインを行うことができ、この値を適切に保存してから、1回の自動ログインを行うことができますが、そのログインで保存が停止します...
それで、ここで何が問題なのですか?SetValue の最初の行として試しまし[[NSUserDefaults standardUserDefaults] removeObjectForKey:Name];
たが、役に立ちません。
それはセットのようで、とにかく忘れられています...私は何が間違っていますか?