Pol*_*les 3 objective-c cllocationmanager ios
我-(void)localnotification在DashboardController.m中实现.现在我想访问localnotification并实现didUpdateLocations委托方法到settingsController.m类中.我的方法到目前为止:
DashBoardViewController.h
#import <CoreLocation/CoreLocation.h>
@class AppDelegate;
@interface DashBoardViewController : UIViewController<CLLocationManagerDelegate, UIAlertViewDelegate>{
AppDelegate *appDel;
}
@property(nonatomic,strong) CLLocationManager *locationManager;
@property (nonatomic,retain) CLLocation *current;
-(void)localnotification;
@end
Run Code Online (Sandbox Code Playgroud)
DashBoardViewController.m
#import "DashBoardViewController.h"
#import "AppDelegate.h"
@interface DashBoardViewController ()
@end
@implementation DashBoardViewController
@synthesize current,locationManager;
- (void)viewDidLoad
{
[super viewDidLoad];
appDel = (AppDelegate*)[UIApplication sharedApplication].delegate;
[self localnotification];
}
-(void)localnotification{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startMonitoringSignificantLocationChanges];
}
Run Code Online (Sandbox Code Playgroud)
现在在SettingController.m我这样访问:
@implementation SettingsViewController
DashBoardViewController *dash;
- (void)viewDidLoad {
[super viewDidLoad];
appDel = (AppDelegate*)[UIApplication sharedApplication].delegate;
dash=[[DashBoardViewController alloc] init];
[dash localnotification];
NSArray *locations;
[self locationManager:appDel.locationManager didUpdateLocations:locations];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
//location 1
CLLocation *locA = [[CLLocation alloc] initWithLatitude:appDel.latVal longitude:appDel.longVal];
//location 2
CLLocation *locB = [[CLLocation alloc] initWithLatitude:appDel.locationManager.location.coordinate.latitude longitude:appDel.locationManager.location.coordinate.longitude ];
appDel.latVal = appDel.locationManager.location.coordinate.latitude; //Latitute of the location
appDel.longVal = appDel.locationManager.location.coordinate.longitude; //Longitude of the location
//Difference between location 1 & location 2
CLLocationDistance dist = [locA distanceFromLocation:locB];
NSLog(@"Difference from Settings: %ld",lroundf(dist));
NSLog(@"Last Location's Object Settings: %@",[locations lastObject]);
}
Run Code Online (Sandbox Code Playgroud)
但[locations lastObject]在settingsController类中返回null.在视图控制器类中,我不必定义位置数组,但在设置类中,因为我只访问本地通知方法,我已经声明了位置数组,否则它会给出错误.我该怎么办?
[self locationManager:appDel.locationManager didUpdateLocations:?];
Run Code Online (Sandbox Code Playgroud)
以下是在多个视图控制器中使用位置管理器的最佳方法:
在AppDelegate.h中
@interface AppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong) CLLocationManager * locationManager;
@property (nonatomic, strong) CLLocation *currentLocation;
Run Code Online (Sandbox Code Playgroud)
在AppDelegate.m中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
if([CLLocationManager locationServicesEnabled]){
currentLocation_ = [[CLLocation alloc] init];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager startUpdatingLocation];
}
}
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
currentLocation_ = newLocation;
}
Run Code Online (Sandbox Code Playgroud)
现在在DashBoardViewController和SettingsViewController中
@property(强,非原子)CLLocation*currentLocation;
- (void)viewDidLoad{
[super viewDidLoad];
if([CLLocationManager locationServicesEnabled]){
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
currentLocation_ = [[CLLocation alloc] initWithLatitude:appDelegate.currentLocation.coordinate.latitude longitude:appDelegate.currentLocation.coordinate.longitude];
}
}
Run Code Online (Sandbox Code Playgroud)
注意: 举个例子,你可以根据需要改进它.
希望它能为你效劳.
| 归档时间: |
|
| 查看次数: |
3621 次 |
| 最近记录: |