Какие-нибудь примеры NSWindowRestoration? - PullRequest
2 голосов
/ 08 февраля 2012

У меня возникли проблемы с реализацией NSWindowRestoration (в 10.7 Lion). Я не получаю уведомления протокола.

Есть ли пример приложения с этим где-нибудь реализованным? Я не могу найти его на сайте Apple Developer. Спасибо!


Редактировать: вопрос, помеченный как ответ, полезен, но проблема в моем случае заключалась в том, что я использовал приложение только для меню. Я думаю, что восстановление окна еще не работает с док-приложениями. Привязать!

Ответы [ 2 ]

6 голосов
/ 01 декабря 2012

Метод класса + (void)restoreWindowWithIdentifier:(NSString *)identifier state:(NSCoder *)state completionHandler:(void (^)(NSWindow *, NSError *))completionHandler, описанный «El Developer», - это только половина решения.

Класс, который реализует метод (и соответствует протоколу NSWindowRegistration), также должен быть зарегистрирован как «класс восстановления» окна.Когда окно изначально создано, зарегистрируйте его, используя метод - (void)setRestorationClass:(Class <NSWindowRestoration>)restorationClass.

например, для оконного контроллера, для инициализации:

_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 голос
/ 08 февраля 2012

Есть один маленький фрагмент кода:

+ (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);
}

Найдено здесь .

Надеюсь, это поможет вам.

Edit:

Убедитесь, что вы реализуете протокол в своем классе приложения, помните, что вы должны добавить его в свой файл m.

@interface MyClass : FatherClass <NSWindowRestoration>

** Я не на 100% назван в протоколе, так что последняя строка может быть неправильной, извините, я сейчас спешу, это либо так, либо NSWindowRestorationDelegate.

...