From a6fa36451e3c69b941521270f6ae2e34a79e1670 Mon Sep 17 00:00:00 2001 From: Tuan Luong Date: Fri, 28 Feb 2020 15:49:47 +0700 Subject: [PATCH] handle didPickDocumentsAtURLs on main thread --- ios/RNDocumentPicker/RNDocumentPicker.m | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/ios/RNDocumentPicker/RNDocumentPicker.m b/ios/RNDocumentPicker/RNDocumentPicker.m index 1cb8b4b0..dd0dc814 100644 --- a/ios/RNDocumentPicker/RNDocumentPicker.m +++ b/ios/RNDocumentPicker/RNDocumentPicker.m @@ -10,6 +10,16 @@ #import "RCTBridge.h" #endif +// WEAKIFY & STRONGIFY +// Helper macro. +#define weakify(var) __weak typeof(var) RNDocumentPicker_##var = var; + +#define strongify(var) \ +_Pragma("clang diagnostic push") \ +_Pragma("clang diagnostic ignored \"-Wshadow\"") \ +__strong typeof(var) var = RNDocumentPicker_##var; \ +_Pragma("clang diagnostic pop") + static NSString *const E_DOCUMENT_PICKER_CANCELED = @"DOCUMENT_PICKER_CANCELED"; static NSString *const E_INVALID_DATA_RETURNED = @"INVALID_DATA_RETURNED"; @@ -146,11 +156,14 @@ - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocum - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray *)urls { + weakify(self); + dispatch_async(dispatch_get_main_queue(), ^{ + strongify(self); if (controller.documentPickerMode == UIDocumentPickerModeImport) { - RCTPromiseResolveBlock resolve = [composeResolvers lastObject]; - RCTPromiseRejectBlock reject = [composeRejecters lastObject]; - [composeResolvers removeLastObject]; - [composeRejecters removeLastObject]; + RCTPromiseResolveBlock resolve = [self->composeResolvers lastObject]; + RCTPromiseRejectBlock reject = [self->composeRejecters lastObject]; + [self->composeResolvers removeLastObject]; + [self->composeRejecters removeLastObject]; NSMutableArray *results = [NSMutableArray array]; for (id url in urls) { @@ -166,6 +179,7 @@ - (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocum resolve(results); } + }); } - (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller