Конвертировать NSArray в CLLCoordinate - PullRequest
1 голос
/ 26 августа 2011

Я пытаюсь преобразовать массив широты и долготы в координаты и установить для него аннотацию Приложение вылетает при этом. Где я делаю это неправильно? Каким-то образом данные испортились, когда они изменились в два раза.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

        CLLocationCoordinate2D addressCoordinate;
        NSLog(@"latArray at index %i is %d in double", indexPath.row, [[latArray objectAtIndex:indexPath.row] doubleValue]);
        NSLog(@"longArray at index %i is %d in double", indexPath.row, [[longArray objectAtIndex:indexPath.row] doubleValue]);
        NSLog(@"latArray at index %i is %@", indexPath.row, [latArray objectAtIndex:indexPath.row]);
        NSLog(@"longArray at index %i is %@", indexPath.row, [longArray objectAtIndex:indexPath.row]);
        addressCoordinate.latitude =  (CLLocationDegrees)[[latArray objectAtIndex:indexPath.row] doubleValue];
        addressCoordinate.longitude =  (CLLocationDegrees)[[longArray objectAtIndex:indexPath.row] doubleValue];
        [mapView removeAnnotation:annotation];
        [annotation moveAnnotation:addressCoordinate];
        annotation.title = [titleArray objectAtIndex:indexPath.row];
        annotation.subtitle = [subtitleArray objectAtIndex:indexPath.row];
        [mapView addAnnotation:annotation];

    }


 // the console log
2011-08-27 00:16:58.286 myApp[1140:207] latArray at index 0 is -1954958020 in double
2011-08-27 00:16:58.287 myApp[1140:207] longArray at index 0 is 519365137 in double
2011-08-27 00:16:58.287 myApp[1140:207] latArray at index 0 is 1.3450389335879
2011-08-27 00:16:58.287 myApp[1140:207] longArray at index 0 is 103.69812749781
2011-08-27 00:16:58.291 myApp[1140:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet addObject:]: attempt to insert nil'

}

Как я подготовил массивы

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    SBJsonParser *parser = [[SBJsonParser alloc] init];
    responseArray = [parser objectWithData:responseData];

    NSDictionary *dict = [responseArray objectAtIndex:i];
        for (int i = 1; i < [responseArray count]; i++) {
                [latArray insertObject:[dict objectForKey:@"lat"] atIndex:i - 1];
        [longArray insertObject:[dict objectForKey:@"long"] atIndex:i - 1];
}

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Что такое latArray keep?Я предполагаю, что это NSNumber от того, как вы вызываете doubleValue.В этом случае вам не нужно приводить к CLLocationDegrees в

addressCoordinate.latitude =  (CLLocationDegrees)[[latArray objectAtIndex:indexPath.row] doubleValue];
addressCoordinate.longitude =  (CLLocationDegrees)[[longArray objectAtIndex:indexPath.row] doubleValue];

и использовать

CLLocationCoordinate2DMake for CLLocationCoordinate2D

, поскольку оно также удваивается.Но я думаю, что проблема в [mapView addAnnotation:annotation]; Я не вижу ни одной аннотации, созданной здесь, не знаю, является ли это иваром.Нужна дополнительная информация.

0 голосов
/ 26 августа 2011

Попробуйте:

  addressCoordinate = CLLocationCoordinate2DMake((CLLocationDegrees)[[latArray objectAtIndex:indexPath.row] doubleValue],(CLLocationDegrees)[[longArray objectAtIndex:indexPath.row] doubleValue]);

вместо того, чтобы пытаться установить широту и долготу такими, какие вы есть, и посмотрите, что произойдет.

...