2017-05-31 29 views
1

我在使用Swift在iOS中从外部源打开的文件的基本处理遇到问题。我试图通过电子邮件从自定义文件类型(带有自定义扩展名的简单文本文件)导出/导入数据。我在导出文件和从应用程序内部作为附件发送时没有问题。我也可以通过编辑info.plist文件将文件类型与我的应用程序关联起来。但是,我不知道如何/在哪里实现该功能来处理文件,一旦我选择用我的应用程序打开它。在iOS/Swift中处理从外部源打开的文件

做一些搜索后我发现这个教程: https://www.raywenderlich.com/1980/email-tutorial-for-ios-how-to-import-and-export-app-data-via-email-in-your-ios-app

然而,所有的对文件处理的指令目标C.

任何帮助,将不胜感激介绍。

回答

2

唯一重要的部分是这样的部分:

// Add at end of application:didFinishLaunchingWithOptions 
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey]; 
if (url != nil && [url isFileURL]) { 
     [rootController handleOpenURL:url];     
} 

// Add new method 
-(BOOL) application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

    RootViewController *rootController = (RootViewController *) [navigationController.viewControllers objectAtIndex:0]; 
    if (url != nil && [url isFileURL]) { 
     [rootController handleOpenURL:url];     
    }  
    return YES; 

} 

第一个代码块添加到您的AppDelegate的application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)

雨燕相当于是

if let options = launchOptions, let url = options[.url] as? URL, url.isFileURL { 
    // call some code to handle the URL 
} 

,并为这个新功能AppDelegate:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    if url.isFileURL { 
     // call some code to handle the URL 
    } 
    return true // if successful 
} 

本文中的所有其他代码都是将处理代码路由到根视图控制器的一种方式。你可以直接在AppDelegate中处理它,或者根据需要将它路由到另一个类。