我想在app图标上打开一个文件。
当我这样做时,我的应用程序被打开,因此文件扩展名已明确定义并与我的应用程序相关。
但永远不会调用application:openFile:
函数。所以我无法打开我的应用程序中丢弃的文件。
我跟踪openFile:
,但永远不会去。
我找到的所有答案都只是在代理中添加openFile:
,而这只是我的情况而已。
任何帮助都会非常感激。非常感谢。
这是我的环境。
plist已经获得了要打开的文件的扩展名。我删除文件时会打开我的应用程序。
我在应用程序的开始时初始化我的委托,
mydelegate = [[MyController alloc] init];
在代表中,
在include中,
@interface MyController : NSObject <NSApplicationDelegate> {
@private
NSWindow *window;
}
@property (assign) IBOutlet NSWindow *window;
-(id) init;
-(BOOL) application: (NSApplication*)sharedApplication openFile:(NSString*) fileName;
@end
在.m文件中,
@implementation MyController
@synthesize window;
- (id)init{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillFinishLaunching:)
name:NSApplicationWillFinishLaunchingNotification object:nil];
}
return self;
}
- (void) applicationWillFinishLaunching:(NSNotification *)aNotification{
NSLog(@"applicationWillFinishLaunching");
}
-(BOOL) application: (NSApplication*)sharedApplication openFile:(NSString*) fileName {
NSLog(@"openFile=%@", fileName);
return YES;
}
@end
答案 0 :(得分:1)
至少在上面提供的代码中,您没有明确地将应用程序的委托设置为MyController
的实例。你在任何地方设置代表吗?
立即关注[[MyController alloc] init]
,试试这个:
[[NSApplication sharedApplication] setDelegate: mydelegate];
如果不进行此连接,应用程序将无法知道谁应该处理委派职责。
OR
处理拖放到停靠栏图标的最常用方法是简单地实现:
-(BOOL)application:(NSApplication *)sender openFile:(NSString *)path
作为AppDelegate类的一部分,在您启动项目时由Xcode自动生成。
答案 1 :(得分:0)
在您获取filePath的方法中包含以下一行: -
//Include this line for calling your method
[self application:[NSApplication sharedApplication]openFile:filename];
答案 2 :(得分:0)
如果您有AppleEvent事件处理程序正在监听'odoc'
打开文档Apple事件:
NSAppleEventManager.shared().setEventHandler(self,
andSelector: #selector(handle(event:replyEvent:)),
forEventClass: AEEventClass(kCoreEventClass),
andEventID: AEEventID(kAEOpenDocuments))
然后,处理程序将拦截这些调用,并且不会调用常规的App Delegate方法。