NSUndoManager Забавена оценка на аргумент

Опитвам се да работя с preparatWithInvocationTarget на NSUndoManager. Бих искал да имам нещо подобно

[[self.undoManager prepareWithInvocationTarget:self] doSomethingWithObject:[self.aMutableArray objectAtIndex:0]]

където аргументът на doSomethingWithObject не се оценява, докато не бъде извикан методът undo. С други думи, не искам аргументът да бъде текущият първи елемент на aMutableArray, а първият елемент на aMutableArray по време на undo.

Има ли конкретна част от NSInvocation или NSMethodSignature, която трябва да разгледам?


person Joseph Johnston    schedule 26.04.2015    source източник


Отговори (1)


Както при всяко извикване на метод, въпросът е само какво се случва къде. Ако не искате [self.aMutableArray objectAtIndex:0] да се оценява сега, не го включвайте в израза за извикване! Вместо това направете израза за извикване извикване на метод, където този метод ще извика [self.aMutableArray objectAtIndex:0]:

[[self.undoManager prepareWithInvocationTarget:self] 
    doSomethingWithObjectAtIndex:0];

... където doSomethingWithObjectAtIndex: е мястото, където се извиква [self.aMutableArray objectAtIndex:0].

person matt    schedule 26.04.2015
comment
Да виждам. Просто си помислих, че може да има начин да го направя, без да създавам допълнителен метод. Благодаря ти. - person Joseph Johnston; 26.04.2015
comment
Добавянето на методи за адаптиране на вашия код към изискванията на мениджъра за отмяна е напълно стандартно. И поради причината, с която се сблъскахте - има разлика между това, което искате да направите сега и това, което искате да направите в бъдеще, когато/ако потребителят каже отмяна. - person matt; 26.04.2015