NSUndoManager Отложенная оценка аргумента

Я пытаюсь работать с NSUndoManager prepareWithInvocationTarget. Я хотел бы иметь что-то вроде

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