Основные данные и действие отмены с Xcode 4 - PullRequest
0 голосов
/ 26 декабря 2011

У меня есть несколько проектов Core Data для MacOS, начатых с Xcode 3, который хорошо работает в Xcode 4, особенно для управления Undo / Redo.
Но теперь я запустил новый проект Core Data из Xcode 4, и у меня возникли проблемыс отменой: пункты меню Undo и Redo связаны с методами Undo:\Redo: первого ответчика, как это происходит для проектов, созданных Xcode 3;но меню всегда было отключено.
Поэтому я сделал привязку из свойства Enabled пунктов меню к managedObjectContext.undoManager.canUndo / canRedo: это позволяет меню, когда пользователь вносит изменения в объекты, но в любом случае действие отмены имелобезрезультатно: меню остается включенным, но отмены не было.
Единственный способ получить отмену - разорвать соединение пунктов меню с Первым респондентом и вместо этого сделать еще один с новыми IBActions AppDelegate:

- (IBAction)myUndoAction:(id)sender  
{
    [[[self managedObjectContext] undoManager] undo];
}

- (IBAction)myRedoAction:(id)sender
{
    [[[self managedObjectContext] undoManager] undo];
}

Таким образом (и со свойствами Enable, связанными с canUndo и canRedo) оба пункта меню работают, как и ожидалось, для объектов Core Data;во всяком случае, у меня никогда не было этой проблемы с Xcode 3.

Кто-нибудь еще сталкивался с этой проблемой с Xcode 4?Я переустановил Xcode 4.2.1 с нуля, чтобы избежать проблем со старым шаблоном, но у меня снова возникает та же проблема.
Я не люблю устанавливать также Xcode 3, просто чтобы начать с работающего проекта, а затем перенести проект вXcode 4!
Я гуглил и просматривал все форумы, которые я знаю, также обсуждения Apple, но я ничего не нашел.Я нахожусь на 10.7.2.


ОБНОВЛЕНИЕ
Связывание Undo / Redo с AppDelegate прервет другие операции, так как Undo / Redo всегда будет вызывать NSUndoManager из ManagedObjectContext, поэтомудействия должны оставаться связанными с Первым ответчиком.
Мне придется придерживаться Xcode 3.2, чтобы с нуля создать проект основных данных, а затем открыть его из Xcode 4 (насколько я выясню, где находится ошибка,наверное в шаблоне ...)

1 Ответ

2 голосов
/ 08 марта 2012

Я смог обойти это самостоятельно, заставив мой оконный контроллер реализовать протокол NSWindowDelegate и заставить его ретранслировать windowWillReturnUndoManager: вызовы делегата приложения.

...