0

コンソールでこのエラーが発生し続けるという問題が発生しています。

* キャッチされない例外 '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" error:nil] objectAtIndex:0] stringValue];

Xcode が使用している場所はカリフォルニア州ウィリアムズで、送信されるクエリは次のとおりです。

ウィリアムズ + CA

これを URL にプラグインすると動作し、XML ファイルを取得できますが、コンソールにこのメッセージが表示されるのはなぜですか?

これは私を夢中にさせています。すべての助けをいただければ幸いです。前もって感謝します!

4

1 に答える 1

3

配列内に少なくとも1つのオブジェクト[worldweather nodesForXPath:@"/data/current_condition/weatherIconUrl" error:nil]があると思われるようです。NSArrayこれは明らかに当てはまらず、インデックス 0 にオブジェクトがないというエラーが表示されます。これは、配列が空であることを意味します。

内部に少なくとも 1 つのオブジェクトがあるかどうかわからない場合は、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 に答える