/ / NSUndoManager не зберігати стек з повторенням / скасуванням для додатку iPhone для малюнків UnDo / Redo - iphone, object-c, undo, nsundomanager, redo

NSUndoManager не зберігає стек з переробкою / скасуванням додатка для iPhone для малюнків UnDo / Redo - iphone, object-c, undo, nsundomanager, redo

Я будую iPhone-додаток з метою C. У своєму додатку я малюю штрихи на зображення і хочу застосувати функції скасування та повторення.

Я використовував NSUndoManager для цього. За допомогою цього я можу відмінити мою малювання на одному рівні, але моя вимога - відмінити малюнок на найнижчому рівні (або, принаймні, мінімум на 10 рівнів внизу). Я вже встановив setLevelsOfUndo до 10, але це не працює.

Я використовую наступний код:

- (void)UnDoImage1:(UIImage*)image
{
if (capturedImage.image != image)
{
[self.managedObjectContext.undoManager undo];
[[self.managedObjectContext.undoManager prepareWithInvocationTarget:self] UnDoImage1:capturedImage.image];
[capturedImage release];
capturedImage.image = [image retain];
}
}

Будь ласка, дайте мені знати, де я невірний. Я вже довгий час займався пошуком Google, але не знайшов точної причини відмови від функціональності.

Відповіді:

0 для відповіді № 1

Я не вірю, що ви можете використовувати prepareWithInvocationTarget: з об'єктом як параметр. Його не збирається зберігати копію capturedImage.image навколо для стек скасування / повторення. Отже, оскільки ви випускаєте його та встановлюєте його на нове зображення, посилання на оригінал втрачається, і ви просто будете викликати UnDoImage1: з поточним capturedImage.image

Якщо це єдине, що ви хочете скасувати / переробити, тоді я б дивився на це registerUndoWithTarget:selector:object: це буде тримати на згадку про capturedImage.image.

Скотт <-