NSUserDefaults standardUserDefaults возвращает ноль - PullRequest
0 голосов
/ 06 ноября 2011

Я видел пару вопросов по этому поводу, но я не думаю, что они отвечают моей проблеме.

В моем методе у меня есть ... в операторе 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', причина: '- [NSMutableArray objectAtIndex:]: индекс 2147483647 за пределами [0 .. 0]'

Итак, я попытался ... прямо перед этой строкой ...

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

И str возвращает ноль.

В моем файле constants.h у меня есть ...

#define kNSUAccountSelection @"accountselection"

Да, accountArray заполняется из моей базы данных и имеет значения.

Я не понимаю, почему я получаю ноль и что я должен сделать, чтобы это исправить?Из того, что я прочитал, это должно работать.

Ответы [ 3 ]

0 голосов
/ 06 ноября 2011

Попробуйте изменить эту строку:

NSString *str = [myDefaults2 stringForKey:kNSUAccountSelection];

на эту:

NSString *str = [myDefaults2 objectForKey:kNSUAccountSelection];

Кроме того, жестко закодируйте @ "1" в своем выражении objectForKey: @ "Account_Name", чтобы убедиться,должно вернуться как положено.

0 голосов
/ 06 ноября 2011

Я предлагаю немного сломать вашу 1-строчную строку.

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]];

1-лайнер, на который я ссылался, теперь

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]

?

0 голосов
/ 06 ноября 2011

Вы уверены, что выполняемое вами утверждение "если" вообще происходит?ошибка отвечает на ваш массив, так что, может быть, расскажите нам, что там происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...