我遇到了这个问题,我在控制台中不断收到此错误:
*由于未捕获的异常'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文件,但为什么我在我的控制台中收到此消息???
这让我发疯了。所有的帮助将非常感谢!提前谢谢!
答案 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
那样崩溃)