在哪里存储应用程序位置数据?
Where to store app location data?
我有一个应用需要在设备打开时检索 longitude/latitude 坐标,然后使用这些坐标与服务器通信。我的应用程序基于 UITabBarController
,因此有不同的页面,其中一些需要使用此位置数据。我还需要在其中一些页面上实现下拉刷新。
我需要知道的是:我应该在哪里存储位置坐标以及我应该在哪里实现CLLocationManager
?我应该在每个需要位置的 class 中有一个位置管理器,还是应该在应用程序委托中?
谢谢
只需创建一个单例位置管理器 class(比如,MyLocationManager
)。您的 .h
文件可能如下所示:
@interface MyLocationManager : NSObject <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocation *currentLocation;
+ (id)sharedInstance;
- (void)updateCurrentLocation;
@end
然后在.m
文件中实现方法:
#import "MyLocationManager.h"
@interface MyLocationManager ()
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
@implementation MyLocationManager
#pragma mark - Singleton methods
+ (id)sharedInstance {
static dispatch_once_t token;
static id shared = nil;
dispatch_once(&token, ^{
shared = [[super alloc] initUniqueInstance];
});
return shared;
}
- (id)initUniqueInstance {
self = [super init];
if (self) {
self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyKilometer];
self.locationManager.delegate = self;
}
return self;
}
#pragma mark - Public methods
- (void)updateCurrentLocation {
[self.locationManager startUpdatingLocation];
}
@end
实施委托方法并在获得更新值时更新 currentLocation
属性。我还建议检查某处的地理定位权限并做出适当的反应。请记住,您应该使用通知 (NSNotificationCenter) 通知其他对象关于单例属性的更新,而不是委托(通常,您不应该将单例绑定到任何对象)。祝你好运!
我有一个应用需要在设备打开时检索 longitude/latitude 坐标,然后使用这些坐标与服务器通信。我的应用程序基于 UITabBarController
,因此有不同的页面,其中一些需要使用此位置数据。我还需要在其中一些页面上实现下拉刷新。
我需要知道的是:我应该在哪里存储位置坐标以及我应该在哪里实现CLLocationManager
?我应该在每个需要位置的 class 中有一个位置管理器,还是应该在应用程序委托中?
谢谢
只需创建一个单例位置管理器 class(比如,MyLocationManager
)。您的 .h
文件可能如下所示:
@interface MyLocationManager : NSObject <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocation *currentLocation;
+ (id)sharedInstance;
- (void)updateCurrentLocation;
@end
然后在.m
文件中实现方法:
#import "MyLocationManager.h"
@interface MyLocationManager ()
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
@implementation MyLocationManager
#pragma mark - Singleton methods
+ (id)sharedInstance {
static dispatch_once_t token;
static id shared = nil;
dispatch_once(&token, ^{
shared = [[super alloc] initUniqueInstance];
});
return shared;
}
- (id)initUniqueInstance {
self = [super init];
if (self) {
self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyKilometer];
self.locationManager.delegate = self;
}
return self;
}
#pragma mark - Public methods
- (void)updateCurrentLocation {
[self.locationManager startUpdatingLocation];
}
@end
实施委托方法并在获得更新值时更新 currentLocation
属性。我还建议检查某处的地理定位权限并做出适当的反应。请记住,您应该使用通知 (NSNotificationCenter) 通知其他对象关于单例属性的更新,而不是委托(通常,您不应该将单例绑定到任何对象)。祝你好运!