Cocoa 如何使用NSWorkspace打开文件类型?-热可可

Cocoa 如何使用NSWorkspace打开文件类型?-热可可,cocoa,nsworkspace,Cocoa,Nsworkspace,我的应用程序能够提取.deb文件,但前提是您在应用程序中使用按钮指定位置。但我希望能够点击一个.deb文件,打开我的应用程序,运行我已经完成的操作,然后在完成后退出。现在我正在使用NSWorspace告诉我的应用程序它可以打开.deb文件,但我不知道如何让它从中运行我的操作。使用NSWorkspace是正确的做法吗?我还需要能够以字符串格式获取正在打开的文件的文件路径,但我似乎无法解决这个问题?请提供更多信息,说明您正在执行的操作,以及为什么它不起作用,例如。G崩溃转储、gdb输出等 如果您不告

我的应用程序能够提取.deb文件,但前提是您在应用程序中使用按钮指定位置。但我希望能够点击一个.deb文件,打开我的应用程序,运行我已经完成的操作,然后在完成后退出。现在我正在使用NSWorspace告诉我的应用程序它可以打开.deb文件,但我不知道如何让它从中运行我的操作。使用NSWorkspace是正确的做法吗?我还需要能够以字符串格式获取正在打开的文件的文件路径,但我似乎无法解决这个问题?

请提供更多信息,说明您正在执行的操作,以及为什么它不起作用,例如。G崩溃转储、gdb输出等


如果您不告诉我们我在做什么,很难猜测什么可能会有所帮助。

我做了一些测试,其他人可能也对这项测试感兴趣。通过一个小例子列出了解决方案

在Xcode中创建一个新的Cocoa项目,转到xib并向窗口添加标签。我们将使用它来证明概念。接下来,给你的应用程序委派一些东西。接口:

#import <Cocoa/Cocoa.h>

@interface fileClickerAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSTextField *fileName;
}

@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSTextField *fileName;

@end
有一种方法可以密切关注:

应用程序:openFiles

猜猜它是干什么的?它接收通过单击桌面上或查找器中的项目或将文件拖到图标上传递的文件列表。它将被传递一个带有UNIX样式的文件名和路径的数组

我的测试不需要在应用程序的plist中设置“文档类型”,也不需要在finder中进行奇特的注册。当然,这可能会增加

这将解决您的问题,您可以对您的.deb文件做任何您想做的事情(我假设debian软件包?)

祝你好运

活着的


注意:不要忘记将NSTextField连接到GUI控件;-)否则,它将工作,但没有显示……/P>你可能想考虑做一个,这将提供您想要的功能,同时仍然允许您使用按钮打开文件。因此,基本上,我希望我的应用程序在您在桌面上单击文件时打开一个文件,就像它是word文档文件一样,并运行我所做的提取操作,我也没有任何代码,我只想能够在finder中单击我的文件类型,并在我的应用程序中打开它,运行某个操作,然后关闭。谢谢,这太棒了!这正是我想要的,deb我指的是DEBIAN软件包。但该应用程序如何知道我正在打开此文件类型?就像该应用程序不会在finder中显示为可以打开此文件类型的应用程序一样。我必须手动搜索并打开它您所说的“不显示在finder中”是什么意思?如果您指的是“打开方式…”,则必须手动注册应用程序类型。首先,转到plist并添加一个键“documenttypes”,这将添加一个带有on项的数组。小心使用正确的钥匙!数组包含文档类型名称的键,该值应为deb。处理程序等级现在可以单独使用(参考文档)。要使您的应用程序成为.deb文件的默认应用程序,请右键单击.deb(例如在您的工作区上)并选择“信息”。您可以为文件类型选择默认应用程序,只需确保更改该类型所有文件的默认应用程序(通过相应的按钮)。
#import "fileClickerAppDelegate.h"

@implementation fileClickerAppDelegate

@synthesize window;
@synthesize fileName;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {

}

- (void)application:(NSApplication *)theApplication openFiles:(NSArray *)filenames {

    [fileName setStringValue:[NSString stringWithFormat:@"Wow, even multiple files like %d :-)", [filenames count]]];
}

@end