У меня возникают проблемы при попытке отобразить текущее положение пользователя в MKMapView.Вот соответствующий код:
Заголовок:
// ParkingMapViewController.m
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface ParkingMapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> {
MKMapView *mapView;
CLLocationManager *locationManager;
}
@property (nonatomic, retain) IBOutlet MKMapView *mapView;
@property (nonatomic, retain) CLLocationManager *locationManager;
-(void)loadAnnotations;
-(void)showCurrentLocationButtonTapped:(id)sender;
@end
Реализация (частичная):
// ParkingMapViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:100 target:self action:@selector(showCurrentLocationButtonTapped:)];
[self loadAnnotations];
CLLocationCoordinate2D centerCoord = { UCD_LATITUDE, UCD_LONGITUDE };
[mapView setCenterCoordinate:centerCoord zoomLevel:13 animated:NO]; //from "MKMapView+ZoomLevel.h"
}
- (void)showCurrentLocationButtonTapped:(id)sender {
NSLog(@"Showing current location.");
//[self.mapView setShowsUserLocation:YES];
//mapView.showsUserLocation = YES;
//[sender setEnabled:NO]; //TODO: Uncomment and test
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
[mapView setCenterCoordinate:newLocation.coordinate];
if ([mapView showsUserLocation] == NO) {
[mapView setShowsUserLocation:YES];//when this line is commented, there is no problem
}
[mapView setCenterCoordinate:newLocation.coordinate zoomLevel:13 animated:YES];
}
- (void)viewDidUnload {
[super viewDidUnload];
[mapView setShowsUserLocation:NO];
}
- (void)dealloc {
[locationManager release];
[mapView release];
[super dealloc];
}
КогдаПри запуске приложения представление карты отображается отлично с аннотациями и всем остальным, но когда нажата кнопка текущего местоположения, карта вновь центрируется на своем новом месте (небольшое перемещение) и через долю секунды происходит сбой.Когда я закомментирую [mapView setShowsUserLocation:YES];
, проблема не возникает, но в противном случае она выдает эту ошибку в консоли:
2010-11-30 22:57:20.657 Parking[53430:207] -[MKUserLocation annotationType]: unrecognized selector sent to instance 0x78427f0
2010-11-30 22:57:20.659 Parking[53430:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKUserLocation annotationType]: unrecognized selector sent to instance 0x78427f0'
*** Call stack at first throw:
(
0 CoreFoundation 0x0266ab99 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x027ba40e objc_exception_throw + 47
2 CoreFoundation 0x0266c6ab -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x025dc2b6 ___forwarding___ + 966
4 CoreFoundation 0x025dbe72 _CF_forwarding_prep_0 + 50
5 Parking 0x00003ddb -[ParkingMapViewController mapView:viewForAnnotation:] + 64
6 MapKit 0x023a8130 -[MKAnnotationContainerView _addViewForAnnotation:] + 175
7 MapKit 0x023a2b2a -[MKAnnotationContainerView _addViewsForAnnotations:animated:] + 251
8 MapKit 0x0239e657 -[MKAnnotationContainerView showAddedAnnotationsAnimated:] + 137
9 MapKit 0x0237837c -[MKMapView _showAddedAnnotationsAndRouteAnimated:] + 102
10 MapKit 0x02376a88 -[MKMapViewInternal delayedShowAddedAnnotationsAnimated] + 191
11 Foundation 0x000571c9 __NSFireTimer + 125
12 CoreFoundation 0x0264bf73 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
13 CoreFoundation 0x0264d5b4 __CFRunLoopDoTimer + 1364
14 CoreFoundation 0x025a9dd9 __CFRunLoopRun + 1817
15 CoreFoundation 0x025a9350 CFRunLoopRunSpecific + 208
16 CoreFoundation 0x025a9271 CFRunLoopRunInMode + 97
17 GraphicsServices 0x02f4900c GSEventRunModal + 217
18 GraphicsServices 0x02f490d1 GSEventRun + 115
19 UIKit 0x002cfaf2 UIApplicationMain + 1160
20 Parking 0x000020e0 main + 102
21 Parking 0x00002071 start + 53
)
terminate called after throwing an instance of 'NSException'
Поиск в Google показал, что это, скорее всего, проблема IB, но я не смогопределите это.Вот экран моей установки в IB:
Любая помощь будет очень цениться.Спасибо!