iphone - CLLocationManager never calls delegate methods -
this question has answer here:
hi i'm playing around locations on iphone , right start ran problems. i've localized problem , determined it's cllocationmanager
that's bugging me.
so developed simple application. have view controller cllocationmanager
in it. on view did load initialize cllocationmanager
, start updating. i've implemented 2 methods didfailwitherror
, didupdatetolocation
.
i've read lot of questions , have learned fare this. have retain cllocationmanager
during initialization. it's wise set cllocationmanagers
delegate
nil
during unloading of view
(something messages passing cllocationmanager
because framework retains , it's never release)
all in cant find decent explanation on , how make work.
here's code if figure out appreciate it. viewcontrollers
header file
#import <uikit/uikit.h> #import <corelocation/corelocation.h> @interface corelocationviewcontroller : uiviewcontroller <cllocationmanagerdelegate> { cllocationmanager *locmanager; } @property (nonatomic, retain) cllocationmanager *locmanager; @end
viewcontroller .m file
#import "corelocationviewcontroller.h" @implementation corelocationviewcontroller @synthesize locmanager; - (void)viewdidload { [super viewdidload]; self.locmanager = [[cllocationmanager alloc] init]; locmanager.delegate = self; [self.locmanager startupdatinglocation]; self.view.backgroundcolor = [uicolor graycolor]; } #pragma mark - #pragma mark location delegate - (void)locationmanager:(cllocationmanager *)manager didfailwitherror:(nserror *)error { nslog(@"in fail error"); } - (void)locationmanager:(cllocationmanager *)manager didupdatetolocation:(cllocation *)newlocation fromlocation:(cllocation *)oldlocation { nslog(@"in update location"); } #pragma mark - #pragma mark memory management - (void)didreceivememorywarning { [super didreceivememorywarning]; } - (void)viewdidunload { self.locmanager.delegate = nil; [super viewdidunload]; } - (void)dealloc { [locmanager release]; [super dealloc]; } @end
btw: i'm using ios 4.2. i'm pointing out because read apple has changed location delegates in ios 4
in case, delegate never gets called because of threading problem
- the thread operates locationmanager must have nsrunloop set
- if use main thread, have runloop, need instantiate manager , use on main thread
Comments
Post a Comment