diff --git a/platform/darwin/src/MGLOfflineTask.mm b/platform/darwin/src/MGLOfflineTask.mm index d57ae6605..a78df6a24 100644 --- a/platform/darwin/src/MGLOfflineTask.mm +++ b/platform/darwin/src/MGLOfflineTask.mm @@ -18,12 +18,21 @@ } \ } while (NO); -class MBGLOfflineRegionObserver; +class MBGLOfflineRegionObserver : public mbgl::OfflineRegionObserver { +public: + MBGLOfflineRegionObserver(MGLOfflineTask *offlineTask_) : offlineTask(offlineTask_) {} + + void statusChanged(mbgl::OfflineRegionStatus status) override; + void responseError(mbgl::Response::Error error) override; + void mapboxTileCountLimitExceeded(uint64_t limit) override; + +private: + __weak MGLOfflineTask *offlineTask = nullptr; +}; @interface MGLOfflineTask () @property (nonatomic, readwrite) mbgl::OfflineRegion *mbglOfflineRegion; -@property (nonatomic, readwrite) MBGLOfflineRegionObserver *mbglOfflineRegionObserver; @property (nonatomic, readwrite) MGLOfflineTaskState state; @property (nonatomic, readwrite) MGLOfflineTaskProgress progress; @@ -43,17 +52,17 @@ class MBGLOfflineRegionObserver; if (self = [super init]) { _mbglOfflineRegion = region; _state = MGLOfflineTaskStateInactive; - _mbglOfflineRegionObserver = new MBGLOfflineRegionObserver(self); mbgl::DefaultFileSource *mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource]; - mbglFileSource->setOfflineRegionObserver(*_mbglOfflineRegion, std::make_unique(*_mbglOfflineRegionObserver)); + MBGLOfflineRegionObserver *mbglObserver = new MBGLOfflineRegionObserver(self); + mbglFileSource->setOfflineRegionObserver(*_mbglOfflineRegion, std::make_unique(*mbglObserver)); } return self; } - (void)dealloc { - delete _mbglOfflineRegionObserver; - _mbglOfflineRegionObserver = nullptr; + mbgl::DefaultFileSource *mbglFileSource = [[MGLOfflineStorage sharedOfflineStorage] mbglFileSource]; + mbglFileSource->setOfflineRegionObserver(*_mbglOfflineRegion, nullptr); } - (id )region { diff --git a/platform/darwin/src/MGLOfflineTask_Private.h b/platform/darwin/src/MGLOfflineTask_Private.h index 0b630ff6f..1c1ff59b8 100644 --- a/platform/darwin/src/MGLOfflineTask_Private.h +++ b/platform/darwin/src/MGLOfflineTask_Private.h @@ -2,27 +2,12 @@ #include -class MBGLOfflineRegionObserver; - @interface MGLOfflineTask (Private) @property (nonatomic) mbgl::OfflineRegion *mbglOfflineRegion; -@property (nonatomic, readonly) MBGLOfflineRegionObserver *mbglOfflineRegionObserver; - (instancetype)initWithMBGLRegion:(mbgl::OfflineRegion *)region; - (void)invalidate; @end - -class MBGLOfflineRegionObserver : public mbgl::OfflineRegionObserver { -public: - MBGLOfflineRegionObserver(MGLOfflineTask *offlineTask_) : offlineTask(offlineTask_) {} - - void statusChanged(mbgl::OfflineRegionStatus status) override; - void responseError(mbgl::Response::Error error) override; - void mapboxTileCountLimitExceeded(uint64_t limit) override; - -private: - __weak MGLOfflineTask *offlineTask = nullptr; -};