我在实施NSWindowRestoration
时遇到了一些问题(在10.7 Lion中)。我没有收到协议通知。
是否有一个示例应用程序在某处实现了这个?我在Apple Developer网站上找不到一个。谢谢!
编辑:标记为答案的问题很有帮助,但我的案例中的问题是我使用的是仅限菜单栏的应用程序。我想窗口恢复不适用于无人应用程序。卡扣!
答案 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
。