2015-04-26 10 views
0

Я пытаюсь работать с NSUndoManager's prepareWithInvocationTarget. Я хотел бы иметь что-то вродеNSUndoManager Delayed Argument Оценка

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

где аргумент doSomethingWithObject не вычисляется, пока метод undo не называется. Другими словами, я не хочу, чтобы аргумент был текущим первым элементом aMutableArray, но первым элементом aMutableArray во время undo.

Есть ли определенная часть NSInvocation или NSMethodSignature, на которые я должен смотреть?

ответ

0

Как и в любом вызове метода, это просто вопрос о том, что происходит где. Если вы не хотите оценивать [self.aMutableArray objectAtIndex:0], не включайте его в выражение вызова! Вместо этого, чтобы выражение Призыва вызов метода, где этот метод будет вызывать [self.aMutableArray objectAtIndex:0]:

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

... где doSomethingWithObjectAtIndex: находится где [self.aMutableArray objectAtIndex:0] называется.

+0

Да, я вижу. Я просто подумал, что может быть способ сделать это, не создавая дополнительный метод. Спасибо. –

+0

Добавление методов для адаптации вашего кода к требованиям менеджера отмены является совершенно стандартным. И по той причине, с которой вы столкнулись - есть разница между тем, что вы хотите сделать сейчас, и тем, что вы хотите сделать в будущем, когда/если пользователь говорит «отменить». – matt