2017-02-17 3 views
0

Я разрабатываю приложение IOS в своем приложении, когда запускаю приложение. App Run отлично. Но длина массива не учитывается для каждого. Как подсчитать длину массива для каждого. Заранее спасибо.NSArrayI objectAtIndex:]: index 7 за пределами границ [0 .. 6]

Это ошибка ..

'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 7 beyond bounds [0 .. 6]' 

Код

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    count = 0; 
    marker = [[GMSMarker alloc] init]; 
    marker.position = camera.target; 
    marker.snippet = @"Jalandhar"; 
    marker.map = mapView; 
    self.view = mapView; 
    timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(updateLocation:) userInfo:nil repeats:YES]; 
} 

- (void)updateLocation:(NSTimer *)timer { 
    [mapView clear]; 

    NSMutableArray *longitute = [[NSMutableArray alloc]init]; 
    NSDictionary *latLongDict = @{@"lat": @[@"31.3062", @"31.3107",@"31.3102",@"31.3194",@"31.3312",@"29.9083",@"31.2941",],@"long": @[@"75.5935", @"75.6061",@"75.6117",@"75.5845",@"75.5908",@"75.7299",@"75.5844",]}; 
    [longitute addObject:latLongDict]; 

    for (NSDictionary *dic in longitute) { 
     NSString *val = [[dic valueForKey:@"lat"]objectAtIndex:count]; 
     NSString *value = [[dic valueForKey:@"long"]objectAtIndex:count]; 
     NSLog(@"%@",val); 
     NSLog(@"%@",value); 
     [CATransaction begin]; 
     [CATransaction setValue:[NSNumber numberWithFloat: 2.0] forKey:kCATransactionAnimationDuration]; 

     CLLocationCoordinate2D center; 
     center.latitude=[val doubleValue]; 
     center.longitude=[value doubleValue]; 
     marker = [[GMSMarker alloc] init]; 
     marker.position = center; 
     marker.map = mapView; 
     self.view = mapView; 
     [CATransaction commit]; 
     count++; 
    } 
} 
+0

Является ли окончательный код или его часть код в исключении? – Vishnuvardhan

+0

Каждый раз, когда срабатывает таймер, вы увеличиваете 'count', и вы не останавливаете таймер или не перезапускаете' count', когда он превышает размер ваших массивов – Paulw11

ответ

0

Таймер, который вызывает метод updateLocation поставил repeats:YES так будет называться каждые 2 секунды.

Вы увеличиваете количество оборотов count++; в цикл for в методе updateLocation. Однако вы сбросите счет только один раз в viewDidLoad. Таким образом, первый вызов будет выполняться просто отлично, но следующий будет терпеть неудачу с индексом за пределами.

Добавить count = 0; ниже [map clear] в updateLocation способом решить проблему

0

Сброс на count к 0 раз перед циклом foreach так что ваш код будет выглядеть следующим образом:

count = 0 // Reset count to zero before the foreach loop 
for (NSDictionary *dic in longitute) { 
     NSString *val = [[dic valueForKey:@"lat"]objectAtIndex:count]; 
     NSString *value = [[dic valueForKey:@"long"]objectAtIndex:count]; 
     NSLog(@"%@",val); 
     NSLog(@"%@",value); 
     [CATransaction begin]; 
     [CATransaction setValue:[NSNumber numberWithFloat: 2.0] forKey:kCATransactionAnimationDuration]; 

     CLLocationCoordinate2D center; 
     center.latitude=[val doubleValue]; 
     center.longitude=[value doubleValue]; 
     marker = [[GMSMarker alloc] init]; 
     marker.position = center; 
     marker.map = mapView; 
     self.view = mapView; 
     [CATransaction commit]; 
     count++; 
} 
Смежные вопросы