ios - 从另一个应用程序的 "Open In"菜单打开文件

标签 ios file-type

我想创建一个可以打开特定文件类型的应用程序,主要来自 Dropbox。我知道我需要在属性列表中设置我的应用程序能够打开某些文件扩展名,但我该如何读取文件?例如,当用户在“打开方式”菜单中触摸我的应用程序图标时,我的应用程序将如何从该文件中获取数据?它将是一个 ASCII 文件,我想将其中的数据读入内存。具体来说,它将读取 .obj 文件。 *注意:与 Objective-C 相比,我更精通 C,所以越具体越好。

最佳答案

您的应用程序需要提供一个应用程序委托(delegate),即一个实现 UIApplicationDelegate 协议(protocol)的类。在该类中,您必须覆盖方法 application:openURL:sourceApplication:annotation:。每当您的应用程序应该处理文件时,iOS 都会调用此方法。

这是一个可以处理文件 URL 的简单示例实现

- (BOOL) application:(UIApplication*)application
             openURL:(NSURL*)url
   sourceApplication:(NSString*)sourceApplication
          annotation:(id)annotation
{
  if (! [url isFileURL])
    return NO;
  NSString* filePath = [url path];

  // Insert code here that processes the file

  // Clean up after you processed the file
  NSFileManager* fileManager = [NSFileManager defaultManager];
  [fileManager removeItemAtPath:filePath error:nil]

  // Indicate that you were able to process the file
  return YES;
}

如果您的应用程序尚未运行,iOS 会首先调用其他几个应用程序委托(delegate)方法,然后调用此方法。例如,您的应用委托(delegate)可以覆盖 application:didFinishLaunchingWithOptions: 并检查作为参数传入的字典的内容。这使您有机会接受或拒绝 URL。

另一个简单的例子:

- (BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
  BOOL canHandleURL = NO;
  NSURL* url = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
  if ([url isFileURL])
    canHandleURL = YES;
  return canHandleURL;
}

有关其他信息,我想重复 rmaddy 的建议,即您阅读有关 UIApplicationDelegate protocol 的 Apple 文档。 .

关于ios - 从另一个应用程序的 "Open In"菜单打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20358677/

相关文章:

ios - 在 UINavigationBar 中单击 "Back"按钮时 UIScrollView 滚动

ios - 如何将 facebook token 安全地扔到自己的服务器上?

ios - 实现 UITabBarControllerDelegate 不起作用

ios - 如何在不破坏旧应用程序版本的情况下更新 Apple 托管的内容?

linux - 在 Linux 中注册文件扩展名/mime 类型

objective-c - 使用 NSDocument 打开任何文件夹

linux - stat "$somepath"--format '%F' 可以返回哪些可能的值

Android:通过蓝牙处理可接受的文件类型问题

android - "Downloads"应用程序中显示的文件的文件类型注册失败

ios - 如何在移动 slider 时更改按钮的背景颜色?