0

これに関するいくつかの質問を見てきましたが、これらが私の問題に答えているとは思いません。

私の方法では、アプリの最初の起動時にデフォルト値を設定するために使用するifステートメント内に...があります。

NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
[myDefaults setObject:@"1" forKey:kNSUAccountSelection];
[myDefaults synchronize];

さらに下では、別のキーで同じことを行います。

それから私はこれを実行します...

NSString *account_name = [[accountArray objectAtIndex:[accountArray 
   indexOfObject:[[NSUserDefaults standardUserDefaults] 
   objectForKey:kNSUAccountSelection]]] objectForKey:@"Account_Name"];

エラーが発生します。

キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。

だから私は試しました...その行の直前に...

NSUserDefaults *myDefaults2 = [NSUserDefaults standardUserDefaults];
NSString *str = [myDefaults2 stringForKey:kNSUAccountSelection];

そして str は nil を返します。

私のconstants.hファイルには...

#define kNSUAccountSelection @"accountselection"

はい、accountArray はデータベースから入力され、値を持っています。

なぜ nil になっているのかわかりません。これを修正するにはどうすればよいですか? 私が読んだことから、これはうまくいくはずです。

4

3 に答える 3

0

あなたが実行している「if」ステートメントがまったく起こっていると確信していますか?エラーは配列に反応するので、そこで何が起こっているのか教えてください。

于 2011-11-05T22:39:43.577 に答える
0

この行を変更してみてください:

NSString *str = [myDefaults2 stringForKey:kNSUAccountSelection];

これに:

NSString *str = [myDefaults2 objectForKey:kNSUAccountSelection];

また、objectForKey:@"Account_Name"ステートメントに@"1"をハードコーディングして、期待どおりに返されるようにします。

于 2011-11-05T22:43:37.760 に答える
0

ワンライナーを少し分解することをお勧めします。

NSString *account_name = [[accountArray objectAtIndex:[accountArray 
   indexOfObject:[[NSUserDefaults standardUserDefaults] 
   objectForKey:kNSUAccountSelection]]] objectForKey:@"Account_Name"];

具体的には

[accountArray 
       indexOfObject:[[NSUserDefaults standardUserDefaults] 
       objectForKey:kNSUAccountSelection]]

あなたのエラーを引き起こしています。

indexOfObject は NSNotFound を返しています

NSNotFound 2147483647

編集

あなたのコメントは私を混乱させます。電話しよう

int index = [accountArray 
           indexOfObject:[[NSUserDefaults standardUserDefaults] 
           objectForKey:kNSUAccountSelection]];

私が参照したワンライナーは今です

NSString *account_name = [[accountArray objectAtIndex:index] objectForKey:@"Account_Name"];

あなたのコメント参照

int num = [[accountArray objectAtIndex:[accountArray indexOfObject:[[NSUserDefaults standardUserDefaults] objectForKey:kNSUAccountSelection]]] intValue];

になる

int num = [[accountArray objectAtIndex:index] intValue];

accountArray の内部には何がありますか? 辞書、文字列、または数値? 配列内の任意のオブジェクトを組み合わせて一致させることができることは知っていますが、何を期待していますか

[accountArray objectAtIndex:index]

することが?

于 2011-11-05T22:48:49.970 に答える