2012-01-03 41 views
0

我正在用Objective C構建一個iPhone應用程序。在我的應用程序中,我正在繪製圖像上的描邊,並且想要實現撤消和重做功能。我爲此已使用NSUndoManager。有了這個功能,我可以在一個層次上撤銷我的繪圖,但是我的要求是在最低可能級別(或至少最低10級)撤消繪圖。我已經將setLevelsOfUndo設置爲10,但它不起作用。NSUndoManager沒有爲UnDo /重做圖形的iPhone應用程序保留重做/撤消堆棧

我用下面的代碼:

- (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

我不認爲你可以使用prepareWithInvocationTarget:作爲參數。它不會保留capturedImage.image的複製副本/重做堆棧。因此,由於您正在釋放它並將其設置爲新圖像,因此對原始圖像的引用將丟失,您將只會調用UnDoImage1:使用當前的capturedImage.image

如果這是您唯一想要撤消/重做的事情,那麼我會看看registerUndoWithTarget:selector:object:它將持有capturedImage.image的參考。

Scott < -