我还在学习,所以,如果这听起来像一个菜鸟问题,那可能就是它。
我正在尝试遍历NSDictionary(messeges)并获取某个键上的值。
当我运行此代码时,我收到以下错误“ *因未捕获的异常而终止应用程序'NSRangeException',原因:'* - [__ NSArrayI objectAtIndex:]:索引4超出边界[0。 .3]'“
NSArray* keys = [messages allKeys];
int count = [keys count] ;
for (int i=0; i < count; i++) {
for(NSString* key in keys) {
if ([key isEqualToString:@"messagesinconversation"]) {
NSArray* arr = [messages objectForKey:key];
NSString *sentby = [[arr valueForKey:@"sentby"] objectAtIndex:i];
NSLog (@"%@", sentby);
}
}
}
有人能指出我正确的方向吗?
答案 0 :(得分:2)
我认为
NSString *sentby = [[arr valueForKey:@"sentby"] objectAtIndex:i];中出现的问题可能是arr数组计数小于键数组计数。但是您正在根据键计数运行for循环。将
NSString *sentby = [[arr valueForKey:@"sentby"] objectAtIndex:i];代码替换为以下代码
NSLog (@"%@", sentby);
for(NSDictionary *dictionary in arr){
NSString *sentby=[dictionary objectForKey:@"sentby"];
NSLog(@"sentby is %@",sentby);
}
答案 1 :(得分:0)
我猜问题是你在运行两个循环
检查一下,
NSArray* keys = [messages allKeys];
int count = [keys count] ;
for (int i=0; i < count; i++) {
NSString *key=[keys objectAtIndex:i];
if ([key isEqualToString:@"messagesinconversation"])
{
NSArray* arr = [messages objectForKey:key];
NSString *sentby = [[arr valueForKey:@"sentby"] objectAtIndex:i];
NSLog (@"%@", sentby);
}
}
答案 2 :(得分:0)
不需要在此数组中objectAtIndex
获取价值。所以请参阅我编辑的代码
NSArray* keys = [messages allKeys];
for(NSString* key in keys)
{
if ([key isEqualToString:@"messagesinconversation"])
{
NSArray* arr = [messages objectForKey:key];
NSString *sentby = [arr valueForKey:@"sentby"]; // here's your problem.
NSLog (@"%@", sentby);
}
}
答案 3 :(得分:0)
目前还不清楚你想要做什么,但根本原因是i
是keys
数组的当前索引,而不是arr
数组。
也许你想要:
NSArray *inconversation = [messages objectForKey:@"messagesinconversation"];
if (inconversation) {
NSArray *sentBy = [inconversation valueForKey:@"sentby"];
for (NSString *sender in sentBy) {
NSLog (@"%@", sender);
}
}
(当你想要一个特定的元素时,为什么还要乱解字典键呢?)
答案 4 :(得分:0)
问题是NSString * sentby = [[arr valueForKey:@“sentby”] objectAtIndex:i];
i大于数组计数,检查i值和数组计数。
在检索值时更好地制作if条件
if(i&lt; = [array count])就像这样