在哪里存储应用程序位置数据?

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) 通知其他对象关于单例属性的更新,而不是委托(通常,您不应该将单例绑定到任何对象)。祝你好运!