Objective c iOS13应用程序openUrl?(Obj-C)

Objective c iOS13应用程序openUrl?(Obj-C),objective-c,ios13,Objective C,Ios13,如何在ios13上将文件导入应用程序 以前,我可以在Safari中下载一个txt文件,并选择复制到应用程序,我会在应用程序委托打开Url委托中捕捉到这一点。不再有用了 到的副本仍然存在于Safari中,但它只是取消了Safari,什么也没有发生 -编辑: 对不起,我不太清楚。 以前,当通过另一个应用程序(如Safari)下载文件时,用户可以通过点击“复制到应用程序”选择在我的应用程序中打开此文件 然后,我将通过appdelegate捕获此复制请求: - (BOOL)application:(UI

如何在ios13上将文件导入应用程序

以前,我可以在Safari中下载一个txt文件,并选择复制到应用程序,我会在应用程序委托打开Url委托中捕捉到这一点。不再有用了

到的副本仍然存在于Safari中,但它只是取消了Safari,什么也没有发生

-编辑:

对不起,我不太清楚。 以前,当通过另一个应用程序(如Safari)下载文件时,用户可以通过点击“复制到应用程序”选择在我的应用程序中打开此文件

然后,我将通过appdelegate捕获此复制请求:

- (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];
}