diff options
Diffstat (limited to 'platform/darwin/src/MGLSource.mm')
-rw-r--r-- | platform/darwin/src/MGLSource.mm | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/platform/darwin/src/MGLSource.mm b/platform/darwin/src/MGLSource.mm index fd54627471..ef23fe30e7 100644 --- a/platform/darwin/src/MGLSource.mm +++ b/platform/darwin/src/MGLSource.mm @@ -7,6 +7,8 @@ #include <mbgl/map/map.hpp> #include <mbgl/style/source.hpp> +const MGLExceptionName MGLInvalidStyleSourceException = @"MGLInvalidStyleSourceException"; + @interface MGLSource () // Even though this class is abstract, MGLStyle uses it to represent some @@ -19,13 +21,14 @@ @implementation MGLSource { std::unique_ptr<mbgl::style::Source> _pendingSource; + mapbox::base::WeakPtr<mbgl::style::Source> _weakSource; } - (instancetype)initWithIdentifier:(NSString *)identifier { if (self = [super init]) { - _identifier = identifier; + _identifier = [identifier copy]; } return self; } @@ -33,13 +36,18 @@ - (instancetype)initWithRawSource:(mbgl::style::Source *)rawSource mapView:(MGLMapView *)mapView { NSString *identifier = @(rawSource->getID().c_str()); if (self = [self initWithIdentifier:identifier]) { - _rawSource = rawSource; - _rawSource->peer = SourceWrapper { self }; + _weakSource = rawSource->makeWeakPtr(); + rawSource->peer = SourceWrapper { self }; _mapView = mapView; } return self; } +- (mbgl::style::Source *)rawSource +{ + return _weakSource.get(); +} + - (instancetype)initWithPendingSource:(std::unique_ptr<mbgl::style::Source>)pendingSource { if (self = [self initWithRawSource:pendingSource.get() mapView:nil]) { _pendingSource = std::move(pendingSource); @@ -59,6 +67,7 @@ } - (BOOL)removeFromMapView:(MGLMapView *)mapView error:(NSError * __nullable * __nullable)outError { + MGLAssertStyleSourceIsValid(); BOOL removed = NO; if (self.rawSource == mapView.style.rawStyle->getSource(self.identifier.UTF8String)) { |