为什么我无法在前一个视图控制器上查看结构值

时间:2011-05-17 13:10:10

标签: objective-c ios pointers mkmapview cllocation

我对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 个答案:

答案 0 :(得分:4)

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;