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”而终止应用程序,原因:“-[NSMutableArray objectAtIndex:]: index 2147483647 beyond bounds [0 .. 0]”

所以我尝试了......直接在那条线之前......

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

str 返回零。

在我的 constants.h 文件中,我有...

#define kNSUAccountSelection @"accountselection"

是的,accountArray 是从我的数据库中填充的并且具有值。

我不明白为什么我得到零以及我必须做些什么来解决这个问题?从我读过的内容来看,这应该可行。

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

我建议把你的 1-liner 拆开一点。

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-liner 现在是

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 回答