почему я не могу просмотреть значение структуры на предыдущем контроллере представления - PullRequest
1 голос
/ 17 мая 2011

Я довольно новичок в Objective-C (и в самой C), так что это, вероятно, действительно просто, но я немного застрял.

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

У меня есть маркер для их перетаскивания и определения их местоположения:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView 
didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState 

В этом методе я хочу обновить предыдущий контроллер представления новыми координатами.

Имеет свойство:

CLLocationCoordinate2D destinationCoordinates;

который я установил как неатомный, присваивать и синтезировать

Мой код делает это:

NSArray *allControllers = self.navigationController.viewControllers;

EnterDetailsViewController *parent = [allControllers objectAtIndex:([allControllers count] -2)];

if ([parent isKindOfClass:[EnterDetailsViewController class]])
{
    CLLocationCoordinate2D theCoordinate;
    theCoordinate.latitude = annotation.coordinate.latitude;
    theCoordinate.longitude =  annotation.coordinate.longitude;

    parent.destinationCoordinates = theCoordinate;

    NSLog(@"Set coord to %@ - %@",
          parent.destinationCoordinates.latitude, 
          parent.destinationCoordinates.latitude);

Но NSLog всегда падает с EXC_BAD_ACCESS - почему это так? Какую основную концепцию я здесь неправильно понимаю?

1 Ответ

4 голосов
/ 17 мая 2011

Определение CLLocationCoordinate2D:

typedef struct {
  CLLocationDegrees latitude;
  CLLocationDegrees longitude;
} CLLocationCoordinate2D;

Вы используете% @ для печати объекта, попробуйте вместо этого:

NSLog(@"Set coord to %f - %f",
      parent.destinationCoordinates.latitude,
      parent.destinationCoordinates.longitude);

Обратите внимание, что CLLocationDegrees имеет тип double:

typedef double CLLocationDegrees;
...