Версии в OSX 10.7

Я включил версии и автосохранение в своем приложении на основе документов, поэтому теперь я могу видеть браузер версий (интерфейс, похожий на машину времени) для каждого из моих документов в OSX 10.7.

+ (BOOL)autosavesInPlace{ return YES; }

У меня есть текстовое представление, и, как было предложено в одном из видеороликов WWDC, сеанс 107, я хочу отключить ввод текста и т. д. при входе в браузер версий. Поэтому я реализовал методы NSWindowDelegate:

- (void)windowWillEnterVersionBrowser:(NSNotification *)notification{
    [myTextView setEditable:NO];
}
- (void)windowWillExitVersionBrowser:(NSNotification *)notification{
    [myTextView setEditable:YES];
}

Теперь myTextView в окне документа (текущего документа) в левой части экрана отключено, но документы в правой части (прошлые версии) по-прежнему отображают курсор.

TextView не редактируется, но отображается курсор. Я также отключаю другие вещи и повторно включаю их в вышеуказанных методах, но написание кода в вышеуказанных методах, похоже, влияет только на текущее окно/документ документа, а не на окна/документ прошлых версий.

Возможно, у кого-то еще такая же проблема? Как я могу получить эту работу правильно? :)

ИЗМЕНИТЬ:

Я искал образец кода WWDC для сеанса 107, но папка пуста. Я что-то пропустил или для этой сессии нет примера кода?

Редактировать2:

В Application Kit Release Note (Lion) говорится, что windowForSheet вызывается при создании окон в правой части браузера версии:

- (NSWindow *)windowForSheet{
    CustomWindow *win = (CustomWindow *)[super windowForSheet];
    [win setUserInteractionEnabled:![self isInViewingMode]]; //disable stuff here
    return win;
}

Но теперь, когда окно возвращается из браузера версии, взаимодействие с пользователем по-прежнему отключено. :(


person nacho4d    schedule 27.07.2011    source источник
comment
Если текст в текстовом представлении старой версии недоступен для редактирования, имеет ли это какое-то значение? Просто зарегистрируйте ошибку в Apple.   -  person Rob Keniger    schedule 27.07.2011
comment
Я знаю, что это никак не изменит функциональность, но выглядит очень некрасиво. Кроме того, странно, что другие приложения, такие как textedit, работают нормально. Возможно, что-то связано с реставрацией окон?   -  person nacho4d    schedule 27.07.2011
comment
Вы смотрели исходный код TextEdit (file:///Developer/Examples/TextEdit), чтобы увидеть, как он справляется с этой ситуацией?   -  person Rob Keniger    schedule 27.07.2011
comment
Я только сейчас посмотрел. Я не смог найти эти методы ни в одном из примеров. Разве это не странно? В TextEdit включены версии, и ни один из методов NSWindowDelegate не реализован, даже те, что «@required». Что здесь происходит?   -  person nacho4d    schedule 27.07.2011


Ответы (1)


В конце концов я нашел ответ:

Методы NSWindowDelegate вызываются для окна текущего документа (документ в левой части обозревателя версий), а другие окна можно скоординировать, переопределив -[NSDocument windowForSheet]; или, что еще лучше, написав нечто подобное внутри -[NSDocument windowControllerDidLoadNib:];.

Я разместил краткое руководство/заметки здесь: Версии в OSX 10.7

person nacho4d    schedule 02.08.2011