如何在NSView之外接收通知?

时间:2012-03-14 03:58:24

标签: objective-c cocoa

免责声明:我是ObjectiveC的新手,所以我可能在我的应用程序结构中犯了根本错误,所以如果有更好的方法来实现我的目标,请告诉我。

我正在尝试制作一个位于状态栏中的应用,例如Dropbox。它应该收到通知。我现在有通知工作,但我已经在应用程序窗口的NSView中实现了它们。我想删除窗口,以便能够实现无窗口应用程序(la Dropbox)。如果我删除了该窗口,它将删除我创建的视图,然后删除我的应用程序接收通知的功能。

如果我解释得不好,我收到的通知就像这样收到:

#import "test.h"    
@implementation test

- (id) initWithFrame:(NSRect)frameRect
{
    self = [super initWithFrame:frameRect];
    ...
    [[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(windowChangeNotification:) name:NSWorkspaceDidActivateApplicationNotification object:nil];
    return self;
}

- (void)windowChangeNotification:(NSNotification *)note
{
    ...
}

测试是NSView:

@interface appTracker : NSView {
    appTrackerDB * eventDB;
}

如何在没有窗口的情况下收到通知?或者有没有办法在没有视图的情况下接收通知?

额外信息:我正在将状态栏UI组件实现为NSMenu,类似于this教程。

我很确定有,但我在文献中迷失了。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

当然,Objective-C中的每个对象都可以接收通知,因此只需将此代码放在AppDelegate或您认为合适的地方,可能是某些模型类。

(顺便说一句:根据惯例,类名以ObjC中的大写字母开头)