在Objective-C中通过双击打开文件

3
当我双击文件时,希望能使用我的应用程序打开文件。我已经将文件类型与应用程序注册,并且如果我将文件拖放到应用程序图标上,则application:openFile:方法可以正常工作。在苹果文档中,它说这种方法应该在用户双击文件时也起作用。
但是我看到的是,当双击打开文件时,应用程序会激活,但Safari会打开文件(尝试打开.webloc文件)。但是,application:openFile:方法没有被调用:(
以下是我在xcode中设置的方式: file type reg 编辑:我已经将.webloc设置为默认使用我的应用程序打开。右键单击“打开方式”> “我的应用程序”也无效。
编辑2:如果我将文件扩展名更改为.mp3或任何其他扩展名,通过双击文件,我的应用程序将正常打开文件!奇怪...
4个回答

2
自从我自己遇到了类似的问题后,我会分享一下我的解决方法。我发现,.webloc文件从不调用-application:openFile:,因此如果你想双击.webloc文件并让你的应用程序处理它,你必须做几件事情来允许你的应用程序成为URL的默认角色处理程序。
本文的最佳答案描述了解决我的问题的过程: 如何将您的Cocoa应用程序设置为默认Web浏览器?

1
双击文件并不会在每个可以处理该文件类型的应用程序中打开它(你能想象当你双击 JPEG 文件时会发生什么吗?)—— 双击使用文件类型的默认应用程序。 在这种情况下,Safari 是 webloc 文件的默认阅读器。 如果您希望使用其他应用程序打开该文件,则需要更改默认设置(您可以从“获取信息”窗口中进行此操作)。

1
我已将文件设置为默认使用我的应用程序打开。同时,当我选择“打开方式” > “我的应用程序”时,它不起作用。 - Silicone

0

可以有多个应用程序都知道如何打开相同类型的文件。如果您想让 您的 应用程序处理 .webloc 文件,请获取此类型的文件的信息。然后在信息窗口中的“打开方式:”部分的弹出菜单中选择您的应用程序。如果您想要将您的应用程序用于所有此类文件,请点击“全部更改...”按钮。


1
我的应用程序已设置为打开此类文件的默认应用程序。 "打开方式" 也无法使用。 - Silicone
1
你是否也实现了 -application:openFiles:?并且在你的实现中是否像文档中所解释的那样调用了 -replyToOpenOrPrint: - Caleb
是的,application:openFiles:也在我的代码中。当将多个文件拖放到应用程序图标上时,也可以正常工作。我尝试过replyToOpenOrPrint:,但没有任何区别。在application:openFile(s):中的代码就是不会被调用。 - Silicone

-1
在Xcode中,使用“Mac OS X :: Cocoa Application”模板创建一个新项目。然后实现代码。
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{ static NSString *content = @"Empty File";
   return [NSData dataWithBytes: [content UTF8String] 
                         length: 1 + strlen ([content UTF8String])]; }

然后,您将拥有一个可用的示例来与您的项目进行比较。


我觉得你有点理解错了我的问题,或者是我没有理解你的回答:( 苹果文档中说:“创建并返回一个包含以指定类型格式化的文档内容的数据对象。” 用于 dataOfType:error:。 我正在寻找的是一种方法,可以打开用户双击的文件。 - Silicone
不,抱歉。该示例Xcode项目允许您创建新文档、保存文档,然后双击打开它。上面的代码是模板代码,需要更改以保存文件。(我的答案后面的方法也需要更改为返回“YES”)。双击功能有效;也许可以帮助您解决原始问题。当然,示例代码创建了一个名为“mydoc”的新文档类型,而您正在打开一个名为“webloc”的现有文档类型-因此,示例代码可能没有帮助。 - GoZoner
我在属性列表编辑器中创建了“我的自己”的.webloc文件,但是打开的却是Chrome。似乎只有如果我使用“.webloc”扩展名Safari才会打开。如果我将扩展名更改为“.mp3”或任何其他扩展名,则所有操作都按预期工作,“application:openFile:”将被调用:S - Silicone
无论如何,我找到了一些旧的.webloc文件(它们有不同的图标),一切都正常工作。因此,我认为我的应用程序并不是文件无法打开的原因! - Silicone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接