Skip to content

Commit 5f05d08

Browse files
authored
[iOS] Fixed Observer Issue (#6878)
* [ios] updated stack trace * [ios] fixed worngnly incrementing subscriber counts
1 parent f7dfed3 commit 5f05d08

File tree

1 file changed

+20
-29
lines changed
  • source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards

1 file changed

+20
-29
lines changed

source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/ACRView.mm

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -509,37 +509,29 @@ - (void)loadImage:(std::string const &)urlStr
509509
url = [NSURL URLWithString:nSUrlStr relativeToURL:_hostConfig.baseURL];
510510
}
511511

512-
NSObject<ACOIResourceResolver> *imageResourceResolver = [_hostConfig getResourceResolverForScheme:[url scheme]];
513-
ImageLoadBlock imageloadblock = nil;
514-
if (!imageResourceResolver || ![imageResourceResolver respondsToSelector:@selector(resolveImageResource:)]) {
515-
imageloadblock = ^(NSURL *url) {
516-
// download image
517-
UIImage *img = nil;
518-
if ([url.scheme isEqualToString:@"data"]) {
519-
NSString *absoluteUri = url.absoluteString;
520-
std::string dataUri = AdaptiveCards::AdaptiveBase64Util::ExtractDataFromUri(std::string([absoluteUri UTF8String]));
521-
std::vector<char> decodedDataUri = AdaptiveCards::AdaptiveBase64Util::Decode(dataUri);
522-
NSData *decodedBase64 = [NSData dataWithBytes:decodedDataUri.data() length:decodedDataUri.size()];
523-
img = [UIImage imageWithData:decodedBase64];
524-
} else {
525-
img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
526-
}
527-
return img;
528-
};
529-
}
512+
ImageLoadBlock imageloadblock = ^(NSURL *url) {
513+
// download image
514+
UIImage *img = nil;
515+
if ([url.scheme isEqualToString:@"data"]) {
516+
NSString *absoluteUri = url.absoluteString;
517+
std::string dataUri = AdaptiveCards::AdaptiveBase64Util::ExtractDataFromUri(std::string([absoluteUri UTF8String]));
518+
std::vector<char> decodedDataUri = AdaptiveCards::AdaptiveBase64Util::Decode(dataUri);
519+
NSData *decodedBase64 = [NSData dataWithBytes:decodedDataUri.data() length:decodedDataUri.size()];
520+
img = [UIImage imageWithData:decodedBase64];
521+
} else {
522+
img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
523+
}
524+
return img;
525+
};
530526

531527
dispatch_group_async(_async_tasks_group, _global_queue,
532528
^{
533-
UIImage *img = nil;
534-
if (imageloadblock) {
535-
img = imageloadblock(url);
536-
} else if (imageResourceResolver) {
537-
img = [imageResourceResolver resolveImageResource:url];
529+
UIImage *img = (imageloadblock) ? imageloadblock(url) : nil;
530+
if (img) {
531+
dispatch_sync(self->_serial_queue, ^{
532+
self->_imageViewMap[nSUrlStr] = img;
533+
});
538534
}
539-
540-
dispatch_sync(self->_serial_queue, ^{
541-
self->_imageViewMap[nSUrlStr] = img;
542-
});
543535
});
544536
}
545537

@@ -727,8 +719,6 @@ - (void)loadImageAccordingToResourceResolverIFForBaseAction:(std::shared_ptr<Bas
727719
NSNumber *number = nil;
728720
NSString *nSUrlStr = nil;
729721

730-
_numberOfSubscribers++;
731-
732722
number = [NSNumber numberWithUnsignedLongLong:(unsigned long long)elem.get()];
733723
nSUrlStr = [NSString stringWithCString:elem->GetIconUrl().c_str() encoding:[NSString defaultCStringEncoding]];
734724
if (!key) {
@@ -740,6 +730,7 @@ - (void)loadImageAccordingToResourceResolverIFForBaseAction:(std::shared_ptr<Bas
740730
if (ACOImageViewIF == [_hostConfig getResolverIFType:[url scheme]]) {
741731
if (observerAction) {
742732
observerAction(imageResourceResolver, key, elem, url, self);
733+
_numberOfSubscribers++;
743734
}
744735
} else {
745736
[self loadImage:[nSUrlStr cStringUsingEncoding:NSUTF8StringEncoding]];

0 commit comments

Comments
 (0)