我想创建一个可以打开特定文件类型的应用程序,主要来自 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/