NSSingleObjectArrayI错误,当JSONparsing在iOS?

在我的代码,当我parsingAPI我得到了像__NSSingleObjectArrayI有零的错误,但数组有价值。

我在这里给我的部分代码

latitudeArray = [monumentArray valueForKey:@"lat"]; NSLog(@"latitudeArray is %@",latitudeArray); longitudeArray = [monumentArray valueForKey:@"lng"]; NSLog(@"longitudeArray is %@",longitudeArray); for (int i = 0; i<3; i++) { CLLocation *locationA = [[CLLocation alloc] initWithLatitude:[latStr doubleValue] longitude:[longStr doubleValue]]; CLLocation *locationB = [[CLLocation alloc] initWithLatitude:[[latitudeArray objectAtIndex:i] doubleValue] longitude:[[longitudeArray objectAtIndex:i] doubleValue]]; ----------> This Line I Got The Crash Error.. CLLocationDistance distanceInMeters = [locationA distanceFromLocation:locationB]; NSLog(@"distanceInMeters is %f",distanceInMeters); float i = distanceInMeters/1000; NSLog(@"distance between two places is %f KM", i); //[locationDistances addObject:distanceInMeters]; } 

NSSingleObjectArrayI是什么意思?

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]' 

请帮我解决它。

纬度arrays有值…

 latitudeArray is ( ( ( ( ( "27.1753210000", "27.1798189999", "27.1928780000" ) ) ) ) 

[latitudeArray objectAtIndex:i][longitudeArray objectAtIndex:i]在您尝试访问特定索引时没有足够的项目。

你可以做什么,以避免崩溃,是在你访问特定索引的对象之前,你检查,如果数组是否不大于i的值。

  for (int i = 0; i<3; i++) { if ([latitudeArray count] > i && [longitudeArray count] > i) { CLLocation *locationA = [[CLLocation alloc] initWithLatitude:[latStr doubleValue] longitude:[longStr doubleValue]]; CLLocation *locationB = [[CLLocation alloc] initWithLatitude:[[latitudeArray objectAtIndex:i] doubleValue] longitude:[[longitudeArray objectAtIndex:i] doubleValue]]; CLLocationDistance distanceInMeters = [locationA distanceFromLocation:locationB]; NSLog(@"distanceInMeters is %f",distanceInMeters); float i = distanceInMeters/1000; NSLog(@"distance between two places is %f KM", i); } } 

首先要澄清一些混淆:NSSingleObjectArray只是一个特殊情况下的NSArray数组与单个元素; 发生了相当多的事情,为了这种情况有一个特殊的,小的对象可以节省空间。 (甚至有一个单数据实例的空数组的类,所有空数组是相同的对象! 所以假装它是一个NSArray。

exception说清楚你试图访问一个不存在的数组元素。 您尝试访问索引1处的元素时,如果数组只有一个元素,则只能访问索引为0的元素。

看来很明显,你期望经度有三个元素,但它只有一个。 我敢打赌,纪念碑arrays不是一个数组,所以不要把它叫做数组。

当你处理JSON时,你必须检查你收到的数据是否是你期望的,否则如果你的服务器没有准确地发送你所期望的信息,你的应用程序将会崩溃。

尝试这个 :

 if (latitudeArray.count == longitudeArray.count) { for (int i = 0; i<latitudeArray.count; i++) { } }