Отменить имена действий для изменений основных данных - PullRequest
4 голосов
/ 18 апреля 2011

Я ищу встроенный (или простой в реализации) способ получения имен действий отмены / повторного выполнения Core Data, например «Отменить изменение имени», а не просто «Отменить» или «Повторить» как они делают по умолчанию.

У меня есть приложение Core Data, и я использую его NSUndoManager в качестве менеджера отмены моего окна. Это прекрасно работает, но когда пользователь вносит изменения в поле (встроенное в NSTableView), заголовок элемента меню «Отменить» не отражает, какое поле изменилось.

Первоначальный поиск привел меня к тому же вопросу, который был опубликован в Списках рассылки Apple в январе 2007 года. Единственный ответ, который когда-либо публиковался, - "Поиск" Model.strings "в Руководстве по программированию основных данных. . " У меня не было файла Strings для моей модели, поэтому я создал его (локализованный в моем каталоге en.lproj и с кодировкой UTF-16), но это не имело никакого значения.

Я следовал инструкциям из руководства Apple (немного адаптирован, поскольку мое приложение не основано на документах) и Документация по базовым данным , но заголовки моего меню по-прежнему читались как "Отменить" и "Повторить".

1 Ответ

1 голос
/ 23 апреля 2011

В вашем подклассе NSManagedObject добавьте

-(void)setValue:(id)value forKey:(NSString *)key
{
    NSUndoManager * aUM = [[self managedObjectContext] undoManager];
    [super setValue:value forKey:key];
    if ([aUM isUndoRegistrationEnabled])
        [aUM setActionName:NSLocalizedString(key,nil)];
}
...