我还在通过做来学习,所以,如果这听起来像个菜鸟的问题,很可能就是这样。
我正在尝试迭代一个NSDictionary (messeges)并获取某个键上的值。
当我运行这段代码时,我会得到以下错误:“*终止应用程序,原因是非正常异常'NSRangeException',原因:'* -__NSArrayI objectAtIndex::index 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);
}
}
}谁能给我指明正确的方向吗?
发布于 2013-09-12 10:50:10
我想问题是你运行两个循环
看看这个,
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);
}
}发布于 2013-09-12 10:54:08
不需要在这个objectAtIndex中获得array.So的价值--请参阅我编辑的代码
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);
}
}发布于 2013-09-12 10:55:39
您到底想做什么还不清楚,但根本原因是i是keys数组的当前索引,而不是arr数组的索引。
也许你想:
NSArray *inconversation = [messages objectForKey:@"messagesinconversation"];
if (inconversation) {
NSArray *sentBy = [inconversation valueForKey:@"sentby"];
for (NSString *sender in sentBy) {
NSLog (@"%@", sender);
}
}(当您想要一个特定的元素时,为什么还要迭代字典键呢?)
https://stackoverflow.com/questions/18762008
复制相似问题