我已经看到了几个关于此的问题,但我不认为这些问题可以回答我的问题。
在我的方法中,我有一个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返回nil。
在我的constants.h文件中,我有......
#define kNSUAccountSelection @"accountselection"
是的,accountArray是从我的数据库中填充的,并且有值。
我不明白为什么我会得到零,我必须做些什么来解决这个问题? 据我所知,这应该有用。
答案 0 :(得分:0)
您确定您正在运行的“if”语句是否正在发生? 错误会响应你的数组,所以也许告诉我们那里发生了什么?
答案 1 :(得分:0)
尝试更改此行:
NSString *str = [myDefaults2 stringForKey:kNSUAccountSelection];
到此:
NSString *str = [myDefaults2 objectForKey:kNSUAccountSelection];
此外,硬编码@" 1"在你的objectForKey中:@" Account_Name"声明,以确保它应按预期返回。
答案 2 :(得分: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]
是吗?