从另一个应用程序的“打开方式”菜单打开文件

时间:2013-12-03 18:18:05

标签: ios file-type

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

1 个答案:

答案 0 :(得分:2)

您的应用程序需要提供应用程序委托,即实现UIApplicationDelegate协议的类。在该类中,您必须覆盖方法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首先会调用其他几个应用程序委托方法,然后再使用此方法。例如,您的app委托可以覆盖application:didFinishLaunchingWithOptions:并检查作为参数传入的字典的内容。这使您有机会接受或拒绝网址。

另一个简单的例子:

- (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文档。