locationManager:didUpdateHeading:
メソッドによって返される継続的に更新される値をaglobal int
またはaのいずれかに格納しproperty int
て、MotionHandlerクラスの他の関数がそれを使用できるようにします。ただし、このデリゲートメソッドは、その値をグローバルに保存することはできず、ローカルにしか保存できないようです。何故ですか?それは実際のMotionHandlerメソッドではないからですか?この問題を回避するにはどうすればよいですか?ご協力ありがとうございました。
MotionHandler.m
#import "MotionHandler.h"
@interface MotionHandler()
{
CLLocationManager *locationManager;
int degrees; // the global in question..
}
@end
@implementation MotionHandler
-(void) startCompassUpdates
{
locationManager =[[CLLocationManager alloc] init];
locationManager.delegate=self;
[locationManager startUpdatingHeading];
}
-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
// This is working, a new value is stored in "degrees" & logged on the console after each update. However it only seems to be updating "degrees" locally..
degrees = (int)locationManager.heading.magneticHeading;
NSLog(@"from delegate method: %i", degrees);
}
-(int) showDegrees
{
return degrees; // This is not working. Whenever I call this method, "degrees" is always zero. Why isn't this global being updated by the previous method ?
}
TheViewController.m
//...
- (void)viewDidLoad
{
[super viewDidLoad];
currentMotionHandler = [[MotionHandler alloc] init];
[currentMotionHandler startCompassUpdates];
while(1==1)
{
NSLog(@"from showDegrees method: %i",[currentMotionHandler showDegrees]); // this just keeps returning zero..
}
}
//...