除了有一个数组,空数组的NSRangeException?

时间:2012-06-19 23:28:19

标签: objective-c ios xml xml-parsing touchxml

我遇到了这个问题,我在控制台中不断收到此错误:

  

*由于未捕获的异常'NSRangeException'而终止应用程序,原因:'* - [__ NSArrayI objectAtIndex:]:索引0超出空数组的边界'

以下是我从XML文档中检索数据的代码:

  

CXMLDocument * worldweather = [[CXMLDocument   alloc] initWithContentsOfURL:[NSURL URLWithString:[NSString   stringWithFormat:@ “http://free.worldweatheronline.com/feed/weather.ashx?q=%@&format=xml&num_of_days=4&key=0ded69e02b171832121504”,查询]   选项:0错误:nil];

     

weathercondition = [[[worldweather nodesForXPath:@“/ data / current_condition / weatherIconUrl”错误:nil]   objectAtIndex:0] stringValue];

Xcode使用的位置是Williams,CA,发送的查询是

  

威廉姆斯+ CA

当我将其插入我的URL时,它可以工作,我得到我的XML文件,但为什么我在我的控制台中收到此消息???

这让我发疯了。所有的帮助将非常感谢!提前谢谢!

1 个答案:

答案 0 :(得分:3)

似乎您认为[worldweather nodesForXPath:@"/data/current_condition/weatherIconUrl" error:nil]NSArray且数组中至少有一个对象。显然不是这种情况,你得到一个错误,说索引0没有对象,这意味着数组是空的。

如果您不确定NSArray中是否至少有一个对象,请不要只调用objectAtIndex:0

您可以先检查数组中有多少个元素然后执行以下工作:

NSArray *weatherArray = [worldweather nodesForXPath:@"/data/current_condition/weatherIconUrl" error:nil];

if ([weatherArray count] > 0){
  weathercondition = [[weatherArray objectAtIndex:0] stringValue];
}

如果您不确定从服务器返回的内容,请查看数组中的内容:

NSLog(@"%@", weatherArray);

或检查有多少元素:

NSLog(@"elements in Array: %i", [weatherArray count]);

您可以使用的另一个有用的东西是例如[weatherArray lastObject],这将始终返回数组的最后一个元素,即使数组为空也将返回nil(它不会像objectAtIndex:0那样崩溃)