¿Cómo funciona exactamente NSInvocation
? ¿Hay una buena introducción?
Tengo problemas específicos para comprender cómo funciona el siguiente código (de Cocoa Programming para Mac OS X, 3a edición ), pero también puedo aplicar los conceptos independientemente del ejemplo del tutorial. El código:
- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
{
NSLog(@"adding %@ to %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager *undo = [self undoManager];
[[undo prepareWithInvocationTarget:self] removeObjectFromEmployeesAtIndex:index];
if (![undo isUndoing])
[undo setActionName:@"Insert Person"];
// Finally, add person to the array
[employees insertObject:p atIndex:index];
}
- (void)removeObjectFromEmployeesAtIndex:(int)index
{
Person *p = [employees objectAtIndex:index];
NSLog(@"removing %@ from %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager *undo = [self undoManager];
[[undo prepareWithInvocationTarget:self] insertObject:p
inEmployeesAtIndex:index];
if (![undo isUndoing])
[undo setActionName:@"Delete Person"];
// Finally, remove person from array
[employees removeObjectAtIndex:index];
}
Entiendo lo que está tratando de hacer. (Por cierto, employees
es NSArray
de una Person
clase personalizada ).
Siendo un tipo .NET, trato de asociar conceptos desconocidos de Obj-C y Cocoa con conceptos más o menos análogos .NET. ¿Es esto similar al concepto de delegado de .NET, pero sin tipo?
Esto no está 100% claro en el libro, por lo que estoy buscando algo complementario de verdaderos expertos de Cocoa / Obj-C, nuevamente con el objetivo de que entiendo el concepto fundamental debajo del ejemplo simple (-ish). Realmente estoy buscando poder aplicar el conocimiento de forma independiente, hasta el capítulo 9, no tuve dificultades para hacerlo. Pero ahora ...
¡Gracias por adelantado!
setArgument:atIndex:
, por lo que la asignación de argumentos debería leerse[myInvocation setArgument:&myString atIndex:2]
.