ios - Problems Trying to Find User Location in MKMapView -


i having problems trying user's current position display on mkmapview. here relevant code:

header:

//  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 

implementation(partial):

//  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 , test     locationmanager = [[cllocationmanager alloc] init];     locationmanager.delegate = self;     locationmanager.distancefilter = kcldistancefilternone; // whenever 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 line commented, there 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]; } 

when running application, map view displays fine annotations , everything, when current location button pressed, map re-centers new location(slight move) , fraction of second later, crashes. when comment out [mapview setshowsuserlocation:yes]; there no problem, otherwise spits out error in console:

2010-11-30 22:57:20.657 parking[53430:207] -[mkuserlocation annotationtype]: unrecognized selector sent instance 0x78427f0 2010-11-30 22:57:20.659 parking[53430:207] *** terminating app due uncaught exception 'nsinvalidargumentexception', reason: '-[mkuserlocation annotationtype]: unrecognized selector sent instance 0x78427f0' *** call stack @ 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 instance of 'nsexception' 

googling has indicated ib problem have not been able spot it. here screen of set in ib:

alt text

any whatsoever appreciated. thanks!

the problem looks in viewforannotation method. code trying call annotationtype on mkuserlocation annotation (which doesn't have such method).

in viewforannotation, should check kind of annotation view being requested , handle accordingly.

however, if using mkmapview, don't need use cllocationmanager user's current location. setting showsuserlocation yes make map view show blue dot user located.

in either case, viewforannotation method needs check annotation class type first. should @ top:

- (mkannotationview *) mapview:(mkmapview *)mapview viewforannotation:(id <mkannotation>) annotation {     if ([annotation iskindofclass:mkuserlocation.class]) {         //it's built-in user location annotation, return nil default blue dot...         return nil;     }      //handle custom annotations... } 

Comments

Popular posts from this blog

asp.net - repeatedly call AddImageUrl(url) to assemble pdf document -

java - Android recognize cell phone with keyboard or not? -

iphone - How would you achieve a LED Scrolling effect? -