循环中的NSRangeException

时间:2013-09-12 10:40:30

标签: ios objective-c

我还在学习,所以,如果这听起来像一个菜鸟问题,那可能就是它。

我正在尝试遍历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);

    }
}
}

有人能指出我正确的方向吗?

5 个答案:

答案 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)

目前还不清楚你想要做什么,但根本原因是ikeys数组的当前索引,而不是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])就像这样