Изменить
Чтобы уточнить, я пытаюсь открыть вложение из электронного письма в моем приложении.Поэтому данные должны быть переданы в 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;
}
Может кто-нибудь указать мне правильное направление?Заранее спасибо!