Как передать информацию с iOS, чтобы она реагировала на загрузку? - PullRequest
0 голосов
/ 31 мая 2018

Изменить

Чтобы уточнить, я пытаюсь открыть вложение из электронного письма в моем приложении.Поэтому данные должны быть переданы в React при инициализации приложения, а также во время его открытия.

Оригинал

Я очень новичок в разработке мобильных приложений,но я пытаюсь передать имя файла через IOS, чтобы реагировать на родной.

Код RN для передачи реквизита при запуске приложения

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  NSURL *jsCodeLocation;

  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];

  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                      moduleName:@"driveby"
                                               initialProperties:nil
                                                   launchOptions:launchOptions];
  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  return YES;
}

Однако этот метод, кажется, выполняется только при запуске приложения.Когда мы открываем файл, нам нужно использовать метод openFile.Метод openURL правильно получает URL-адрес файла, но я не могу понять, как передать его в RCTRootView.

Мне бы очень хотелось, если бы я мог просто отредактировать реквизиты в rootViewController, но я бы не смогне могу найти способ сделать это, читая исходный код RN (хотя я новичок в цели C и не до конца понимаю код).Я догадываюсь, что мне нужно пересмотреть представление с новыми реквизитами.

Я не думаю, что это правильно, но я попытался создать новый rootview и передать его rootViewController, но я получил «TypeError: ожидаемый динамический тип not null/object/array’, but had type null '.

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  NSURL *jsCodeLocation;

  NSDictionary *urlDict = [NSDictionary dictionaryWithObjectsAndKeys: @"url", url, nil];

  NSLog(@"####################### Open URL");
  NSLog(@"Open URL:\t%@\n" "From source:\t%@\n" "With annotation:%@", url, sourceApplication, annotation);  //url is shown here!
  //NSString *filepath = [url path];
   //...

   jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];

   RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                       moduleName:@"driveby"
                                                initialProperties:urlDict
                                                    launchOptions:urlDict];
   rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

   self.window.rootViewController.view = rootView;
   [self.window makeKeyAndVisible];

   return YES;
}

Может кто-нибудь указать мне правильное направление?Заранее спасибо!

1 Ответ

0 голосов
/ 31 мая 2018

В React Native механизм, с помощью которого вы передаете информацию между вашим кодом JavaScript и собственным кодом, осуществляется через собственные модули.

Вы можете создать мостовой модуль и вызвать этот конкретный метод со стороны JS для предоставления вашего представления.с указанным URL-адресом.

С другой стороны, вы также можете использовать генератор событий для отправки URL-адреса обработчику событий на стороне JS, который затем может открыть этот файл при получении события.

Взгляните здесь , это должно помочь вам с тем, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...