处理从iOS / Swift中的外部源打开的文件

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

在做了一些搜索之后,我找到了这个教程: https : //www.raywenderlich.com/1980/email-tutorial-for-ios-how-to-import-and-export-app-data-via-email-in-您-IOS-应用

但是,有关文件处理的所有说明都在Objective C中介绍。

任何有关这方面的帮助将不胜感激。

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

// 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]?)

Swift的等价物是

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

这个AppDelegate的新function:

 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中处理它,或者如果您愿意,可以将其路由到另一个类。

在我的情况下,我想在我的应用程序中打开一个json文件。 我做了这段代码:

App代表:

  func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool{ do { let data = try Data(contentsOf: url, options: .mappedIfSafe) let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) if let jsonResult = jsonResult as? Dictionary { let obj = MyObject(json: jsonResult) save(obj) //Save is a function that will save my object to the data base } } catch{ return false } return true } 

不要忘记在项目设置中启用“自定义文件类型”。

这将使我的应用程序能够打开文件.myapp 这将使我的应用程序能够打开文件.myapp