【问题标题】:Opening a file by double clicking it in objective-c通过在objective-c中双击打开文件
【发布时间】:2012-04-16 18:25:14
【问题描述】:

我想在双击文件时用我的应用程序打开一个文件。我已经向应用程序注册了文件类型,如果我将文件放到应用程序图标上,application: openFile: 方法可以正常工作。在苹果文档中它说,当用户双击文件时,这种方法也应该起作用。

我看到的是,通过双击打开文件时,应用程序将激活,但 Safari 会打开文件(尝试打开 .webloc 文件)。但是方法application: openFile: 没有被调用:(

这是我在 xcode 中的设置方式:

编辑:

我已将 .webloc 设置为作为我的应用程序的标准打开。同样右键单击“打开方式”>“我的应用程序”也不起作用。

编辑 2: 如果我将文件扩展名重命名为 .mp3 或任何其他文件,我的应用程序将通过双击打开该文件!奇怪……

【问题讨论】:

    标签: objective-c macos


    【解决方案1】:

    由于我自己也遇到过类似的问题,所以我将添加对我有用的内容。我发现 .webloc 文件从不调用 -application:openFile:,相反,如果您只想双击 .webloc 并让您的应用程序处理它,您必须做几件事以允许您的应用程序成为 URL 的默认角色处理程序。

    这篇文章中选择的答案描述了解决我的问题的过程: How do you set your Cocoa application as the default web browser?

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我已将文件设置为默认使用我的应用程序打开。此外,当我选择“打开方式”>“我的应用程序”时,它不起作用
      【解决方案3】:

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

      【讨论】:

      • 我的应用程序被设置为默认应用程序来打开这种文件。 “打开方式”也不起作用。
      • 你也实现-application:openFiles:吗?您是否按照文档中的说明在您的实现中调用-replyToOpenOrPrint:
      • 是的,application:openFiles: 也在我的代码中。在应用程序图标上放置多个文件时也可以正常工作。我试过replyToOpenOrPrint:,但没有任何区别。 application:openFile(s): 中的代码没有被调用
      【解决方案4】:

      在 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:。我在找什么是一种打开用户双击文件的方法。
      • 不抱歉。示例 Xcode 项目允许您创建一个新文档,保存该文档,然后双击它打开它。上面的代码是模板代码,需要更改才能保存文件。 (我的答案后面的方法也需要更改为返回“是”。)双击有效;也许它可以帮助您解决最初的问题。当然,示例代码创建了一个新的文档类型“mydoc”,而您正在打开一个现有的文档类型“webloc”——所以示例代码可能没有帮助。
      • 我在属性列表编辑器中制作了“我自己的”.webloc 文件,但是刚刚打开的 chrome。似乎只有当我使用“.webloc”扩展名时,Safari 才会打开。如果我将扩展名更改为“.mp3”或任何其他扩展名,它将按预期工作,application: openFile: 将被称为:S
      • 无论如何,找到一些较旧的 .webloc 文件(具有不同的图标)并且一切正常。所以我认为文件没有被打开不是我的应用程序的错!
      猜你喜欢
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多