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++) { } }