iOS导入应用外文件

29 篇文章 0 订阅

之前需求提出想要像安卓一样从手机的文件夹获取文档

安卓那种肯定做不到,只能用像QQ、微信之类的外部app传入文档。在网上看了一些资料,总结如下:

 

1、拷贝文档方式,如图

这是从QQ上打开的word文档,然后点击用其他应用打开,图中第二行,可以找到很多其他app,问题是如何让自己的app处于其中。

方法如下:

其实只需要在info.plist注册文件类型,就可以在其他app中找到了

需要在info.plist文件中,添加一个新的属性Document type,用source code方式把下面的内容粘贴进去就行,可以删除自己不需要的文件类型

<key>CFBundleDocumentTypes</key>
	<array>
		<dict>
			<key>CFBundleTypeName</key>
			<string>PDF</string>
			<key>LSHandlerRank</key>
			<string>Owner</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>com.adobe.pdf</string>
			</array>
		</dict>
		<dict>
			<key>CFBundleTypeName</key>
			<string>Microsoft Word</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>com.microsoft.word.doc</string>
				<string>com.microsoft.word.wordml</string>
				<string>org.openxmlformats.wordprocessingml.document</string>
			</array>
		</dict>
		<dict>
			<key>CFBundleTypeName</key>
			<string>Microsoft Excel</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>com.microsoft.excel.xls</string>
				<string>org.openxmlformats.spreadsheetml.sheet</string>
			</array>
		</dict>
		<dict>
			<key>CFBundleTypeIconFiles</key>
			<array/>
			<key>CFBundleTypeName</key>
			<string>Microsoft PowerPoint</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>com.microsoft.powerpoint.​ppt</string>
				<string>org.openxmlformats.presentationml.presentation</string>
				<string>public.presentation</string>
			</array>
		</dict>
		<dict>
			<key>CFBundleTypeName</key>
			<string>Text</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>public.text</string>
				<string>public.plain-text</string>
				<string>public.utf8-plain-text</string>
				<string>public.utf16-external-plain-​text</string>
				<string>public.utf16-plain-text</string>
				<string>com.apple.traditional-mac-​plain-text</string>
				<string>public.source-code</string>
				<string>public.c-source</string>
				<string>public.objective-c-source</string>
				<string>public.c-plus-plus-source</string>
				<string>public.objective-c-plus-​plus-source</string>
				<string>public.c-header</string>
				<string>public.c-plus-plus-header</string>
				<string>com.sun.java-source</string>
				<string>public.script</string>
				<string>public.shell-script</string>
			</array>
		</dict>
		<dict>
			<key>CFBundleTypeName</key>
			<string>Rich Text</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>public.rtf</string>
				<string>com.apple.rtfd</string>
				<string>com.apple.flat-rtfd</string>
			</array>
		</dict>
		<dict>
			<key>CFBundleTypeName</key>
			<string>HTML</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>public.html</string>
				<string>public.xhtml</string>
			</array>
		</dict>
		<dict>
			<key>CFBundleTypeName</key>
			<string>Image</string>
			<key>LSHandlerRank</key>
			<string>Alternate</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>public.image</string>
			</array>
		</dict>
	</array>

然后再Appdelegate中添加以下方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
    // 判断传过来的url是否为文件类型
    if ([url.scheme isEqualToString:@"file"]) {
       
        //todo 操作文档
        
        
    }
    return YES;
}

这样就可以获取并操作外部传过来的文档了。

 

 

2.存储到“文件”方式(iOS11之后可用),如图

在外部app存储文档到自己app的“文件夹”

 

 

在自己app内部可以打开如上图方式的文件夹,然后获取到文档

 

方法如下:

也是在info.plist中添加一组键值,Supports Document Browser设置为YES

<key>UISupportsDocumentBrowser</key>
	<true/>

这样就可以在打开微信或qq等外部app中将他们的文档存储到我们app的文件夹中,再从我们的app中打开文件夹界面,选择存储好的文档,代码如下(随便写在一个控制器中的):

- (IBAction)presentDocumentPicker:(id)sender {
    //类型可以根据需求自己加
    NSArray *documentTypes = @[@"com.microsoft.word.doc",@"com.microsoft.excel.xls"];
    UIDocumentPickerViewController *pickerVC = [[UIDocumentPickerViewController alloc]initWithDocumentTypes:documentTypes inMode:UIDocumentPickerModeOpen];
    pickerVC.delegate = self;
    [self presentViewController:pickerVC animated:YES completion:nil];
    
}

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray <NSURL *>*)urls{
    
    //获取文档url,操作文档
}

以上就是两种导入外部文档的方式,将就用着

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件存储在Swift iOS开发中是一个重要的主题。Swift提供了多种方法来进行文件存储和管理。其中一种常见的方法是使用沙盒机制。沙盒是每个iOS应用程序的独立文件系统,每个应用程序都有自己的文件目录,其他应用程序无法访问其中的文件。 在iOS中,常见的文件存储方式包括: 1. 用户文档目录(Documents Directory):用于存储用户生成的数据,例如用户创建的文件或下载的内容。这些文件会被自动备份到iCloud,并在需要时可以从其他设备访问。可以使用`FileManager`类的`urls(for:in:)`方法获取该目录的URL。 2. 应用程序支持文件目录(Application Support Directory):用于存储应用程序的数据文件,例如数据库文件和配置文件。这些文件不会被自动备份到iCloud。可以使用`FileManager`类的`urls(for:in:)`方法获取该目录的URL。 3. 缓存目录(Caches Directory):用于存储临时数据,例如网络请求的缓存文件。这些文件不会被自动备份到iCloud,可能会在系统需要释放存储空间时被删除。可以使用`FileManager`类的`urls(for:in:)`方法获取该目录的URL。 4. 临时目录(Temporary Directory):用于存储临时文件,例如在应用程序运行期间创建的临时文件。这些文件可能会在应用程序终止后自动被删除。可以使用`FileManager`类的`temporaryDirectory`属性获取该目录的URL。 此,还可以使用`UserDefaults`类来进行轻量级的数据存储,例如存储用户的偏好设置。 在SwiftUI中,还可以使用`FileImporter`修改器方法来将Files App中的文件导入应用程序中。这个功能是从SwiftUI 2.0开始引入的,可以方便地将文件导入应用程序中进行处理。 总之,Swift提供了多种方法来进行文件存储和管理,开发者可以根据具体需求选择适合的方法来处理文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SwiftUI 实现一个 iOSFiles App 兼容的文件资源管理器](https://blog.csdn.net/mydo/article/details/130714434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值