任何NSWindowRestoration的例子?

时间:2012-02-08 03:50:49

标签: objective-c macos cocoa osx-lion nswindow

我在实施NSWindowRestoration时遇到了一些问题(在10.7 Lion中)。我没有收到协议通知。

是否有一个示例应用程序在某处实现了这个?我在Apple Developer网站上找不到一个。谢谢!


编辑:标记为答案的问题很有帮助,但我的案例中的问题是我使用的是仅限菜单栏的应用程序。我想窗口恢复不适用于无人应用程序。卡扣!

2 个答案:

答案 0 :(得分:6)

“El Developer”描述的类方法+ (void)restoreWindowWithIdentifier:(NSString *)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler只是解决方案的一半。

实现该方法的类(并符合NSWindowRegistration协议)也必须注册为窗口的“恢复类”。 最初创建窗口时,使用- (void)setRestorationClass:(Class <NSWindowRestoration>)restorationClass方法注册它。

e.g。对于窗口控制器,用于初始化:

_myWindowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindowController"];
_myWindowController.window.restorationClass = self.class;
_myWindowController.window.identifier = @"MyWindow";

进行修复:

+ (void)restoreWindowWithIdentifier:(NSString *)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler {

    if ([identifier isEqualToString:@"MyWindow"]) {
        MyAppDelegate *appDelegate = (MyAppDelegate *)NSApplication.sharedApplication.delegate;
        NSWindow *myWindow = appDelegate.myWindowController.window;

        completionHandler(myWindow, nil);
    }
}

答案 1 :(得分:1)

有一个小代码snipet:

+ (void)restoreWindowWithIdentifier:(NSString *)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler
{
   // Get the window from the window controller,
   // which is stored as an outlet by the delegate.
   // Both the app delegate and window controller are
   // created when the main nib file is loaded.
   MyAppDelegate* appDelegate = (MyAppDelegate*)[[NSApplication sharedApplication] delegate];
   NSWindow* mainWindow = [appDelegate.windowController window];

   // Pass the window to the provided completion handler.
   completionHandler(mainWindow, nil);
}

找到here

希望这会对你有帮助。

编辑:

确保在应用程序类中实现协议,请记住必须将其添加到m文件中。

@interface MyClass : FatherClass <NSWindowRestoration>

**我不是100%的协议名称,所以最后一行可能是错误的,对不起我现在急于求成,或者是NSWindowRestorationDelegate