我对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
崩溃 - 这是为什么?我在这里误解了什么核心概念?
答案 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;