From 1907a10106ae7b7b0899077cd8d756845f0264b8 Mon Sep 17 00:00:00 2001 From: Aleksey Belouosv Date: Wed, 17 Oct 2018 19:00:46 +0300 Subject: [PATCH] [iOS] fix crash when updating booking data on PP --- iphone/Maps/UI/PlacePage/MWMPlacePageData.mm | 14 +++++----- .../Preview/MWMPPPreviewLayoutHelper.mm | 26 ++++++++++++------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm index 42ff78249d..9ae5fdbdb9 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm @@ -211,14 +211,12 @@ NSString * const kUserDefaultsLatLonAsDMSKey = @"UserDefaultsLatLonAsDMS"; .decimalSeparator]]; NSString * currencyString = [self.currencyFormatter stringFromNumber:currencyNumber]; - dispatch_async(dispatch_get_main_queue(), ^{ - self.cachedMinPrice = [NSString stringWithCoreFormat:L(@"place_page_starting_from") - arguments:@[currencyString]]; - self.bookingDiscount = blocks.m_maxDiscount; - self.isSmartDeal = blocks.m_hasSmartDeal; - if (self.bookingDataUpdatedCallback) - self.bookingDataUpdatedCallback(); - }); + self.cachedMinPrice = [NSString stringWithCoreFormat:L(@"place_page_starting_from") + arguments:@[currencyString]]; + self.bookingDiscount = blocks.m_maxDiscount; + self.isSmartDeal = blocks.m_hasSmartDeal; + if (self.bookingDataUpdatedCallback) + self.bookingDataUpdatedCallback(); }; auto params = booking::BlockParams::MakeDefault(); diff --git a/iphone/Maps/UI/PlacePage/PlacePageLayout/Preview/MWMPPPreviewLayoutHelper.mm b/iphone/Maps/UI/PlacePage/PlacePageLayout/Preview/MWMPPPreviewLayoutHelper.mm index 52149aa21b..35b1cfac49 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageLayout/Preview/MWMPPPreviewLayoutHelper.mm +++ b/iphone/Maps/UI/PlacePage/PlacePageLayout/Preview/MWMPPPreviewLayoutHelper.mm @@ -235,17 +235,23 @@ std::array const kPreviewCells = {{[_MWMPPPTitle class], auto reviewCell = static_cast(c); if (data.isBooking) { - [reviewCell configWithRating:data.bookingRating - canAddReview:NO - isReviewedByUser:NO - reviewsCount:0 - ratingsCount:0 - price:data.bookingPricing - discount:data.bookingDiscount - smartDeal:data.isSmartDeal - onAddReview:nil]; + auto configCellBlock = ^(MWMPlacePageData *data) { + [reviewCell configWithRating:data.bookingRating + canAddReview:NO + isReviewedByUser:NO + reviewsCount:0 + ratingsCount:0 + price:data.bookingPricing + discount:data.bookingDiscount + smartDeal:data.isSmartDeal + onAddReview:nil]; + }; + configCellBlock(data); + __weak __typeof(data) weakData = data; data.bookingDataUpdatedCallback = ^{ - [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; + __strong __typeof(weakData) data = weakData; + if (data) + configCellBlock(data); }; } else