Objective c iOS13应用程序openUrl?(Obj-C)
如何在ios13上将文件导入应用程序 以前,我可以在Safari中下载一个txt文件,并选择复制到应用程序,我会在应用程序委托打开Url委托中捕捉到这一点。不再有用了 到的副本仍然存在于Safari中,但它只是取消了Safari,什么也没有发生 -编辑: 对不起,我不太清楚。 以前,当通过另一个应用程序(如Safari)下载文件时,用户可以通过点击“复制到应用程序”选择在我的应用程序中打开此文件 然后,我将通过appdelegate捕获此复制请求:Objective c iOS13应用程序openUrl?(Obj-C),objective-c,ios13,Objective C,Ios13,如何在ios13上将文件导入应用程序 以前,我可以在Safari中下载一个txt文件,并选择复制到应用程序,我会在应用程序委托打开Url委托中捕捉到这一点。不再有用了 到的副本仍然存在于Safari中,但它只是取消了Safari,什么也没有发生 -编辑: 对不起,我不太清楚。 以前,当通过另一个应用程序(如Safari)下载文件时,用户可以通过点击“复制到应用程序”选择在我的应用程序中打开此文件 然后,我将通过appdelegate捕获此复制请求: - (BOOL)application:(UI
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
[...]
}
在iOS13中不调用此委托,仅在iOS12及以下版本中调用
我试图找到一种方法来捕获从其他应用程序请求的副本,但无济于事。似乎有一种通过SceneDelegate处理这些事情的新方法?在具有SceneDelegate.swift文件的项目中,应该实现场景:openURLContext方法
输出:
scene(_:openURLContexts:)
[
<UIOpenURLContext: 0x282fbca20;
URL: file:///private/var/mobile/Containers/Data/Application/A644621B-BD6C-443B-A9D1-A212EA59EE2E/Documents/Inbox/file.pdf;
options: <UISceneOpenURLOptions: 0x2823112c0;
sourceApp: (null);
annotation: (null);
openInPlace: NO>>
]
参考:目标C的版本
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
[[CommonController sharedInstance] handleExternalUrl: url];
return YES;
}
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
NSLog(@"application openURL: %@", url);
return [[CommonController sharedInstance] handleExternalUrl: url];
}
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)){
NSSet *c = connectionOptions.URLContexts;
if(c && [c count] > 0)
{
NSURL *url = ((UIOpenURLContext*)[[c allObjects] firstObject]).URL;
[[CommonController sharedInstance] handleExternalUrl: url];
}
}
- (void)scene:(UIScene *)scene openURLContexts:(nonnull NSSet<UIOpenURLContext *> *)URLContexts
API_AVAILABLE(ios(13.0)){
NSURL *url = [[URLContexts allObjects] firstObject].URL;
[[CommonController sharedInstance] handleExternalUrl: url];
}
你是说你想下载一个文件?不需要Safari,只需使用。请查看我的更新问题。谢谢在场景代理中实现windowScene:openURL:…另一个选项是创建一个。好的,谢谢!我在实现场景代理和连接它时遇到了严重的问题。这里有些我不懂的基本东西。那么scenedelegate是一个专门的职业?我在哪里接?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
[[CommonController sharedInstance] handleExternalUrl: url];
return YES;
}
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
NSLog(@"application openURL: %@", url);
return [[CommonController sharedInstance] handleExternalUrl: url];
}
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)){
NSSet *c = connectionOptions.URLContexts;
if(c && [c count] > 0)
{
NSURL *url = ((UIOpenURLContext*)[[c allObjects] firstObject]).URL;
[[CommonController sharedInstance] handleExternalUrl: url];
}
}
- (void)scene:(UIScene *)scene openURLContexts:(nonnull NSSet<UIOpenURLContext *> *)URLContexts
API_AVAILABLE(ios(13.0)){
NSURL *url = [[URLContexts allObjects] firstObject].URL;
[[CommonController sharedInstance] handleExternalUrl: url];
}