0

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

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array”

这是我从 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错误:无];

weathercondition = [[[worldweather nodesForXPath:@"/data/current_condition/weatherIconUrl" error:nil] objectAtIndex:0] stringValue];

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

威廉姆斯+CA

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

这真让我抓狂。非常感谢所有帮助!提前致谢!

4

1 回答 1

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

于 2012-06-19T23:34:35.163 回答