Desfazer / refazer com um UITextView (iOS / iPHone)

Eu tenho uma visão em que um UITextView sempre tem foco. O que eu quero fazer é estender o comportamento interno de desfazer / refazer para oferecer suporte a desfazer / refazer quando eu definir programaticamente o texto (por exemplo, para quando eu limpá-lo, definindo-o como @ "").

Como apenas o firstResponder obtém eventos de desfazer / refazer, pensei em usar a propriedade undoManager do UITextView para criar minhas invocações. por exemplo.,

// Before clearing the text...
[[self.myTextView.undoManager prepareWithInvocationTarget:self] undoClear:self.myTextView.text]; 
[self.myTextView.undoManager setActionName:@"Clear"];

// ...

-(void)undoClear:(NSString *)textToRestore
{
    self.myTextView.text = textToRestore;
    if ([self.myTextView.undoManager isUndoing])
    {
      // Prepare the redo.
      [[self.myTextView.undoManager prepareWithInvocationTarget:self] undoClear:@""];  
    }
}

Infelizmente, isso não está funcionando. Isto:

Introduz um item vazio na pilha de desfazer ("Desfazer")O "Desfazer limpeza" é adicionado após esse item (se eu tocar em "Desfazer", vejo "Desfazer limpeza")Desfazer Limpar e Refazer trabalho claro, no entanto, vejo "Desfazer Limpar" novamente e não funciona a partir daí.

Alguma ideia? Estou abordando isso errado?

Atualizar: Parece que eu descobri o problema de desfazer vazio: acontece quando eu defino o texto do UITextViewdepois de Eu chamei prepareWithInvocationTarget. Se eu ligar antes, isso não acontece. O engraçado é que o item vazio não é empurrado para a pilha de desfazer se eu não chamar o prepareWithInvocationTarget (ou seja, normalmente, quando eu definir o texto de um UITextView).

questionAnswers(3)

yourAnswerToTheQuestion