Pregunta

¿Es posible codificar un bloque objetivo-C con un NSKeyedArchiver?

No creo que un objeto de bloque sea NSCoding-Compliante, por lo tanto [coder encodeObject:block forKey:@"block"] ¿No funciona?

¿Algunas ideas?

¿Fue útil?

Solución

No, no es posible por una variedad de razones. Los datos contenidos dentro de un bloque no están representados de ninguna manera similar a, por ejemplo, variables de instancia. No hay inventario de estado y, por lo tanto, no hay forma de enumerar el estado con fines de archivo.

En cambio, le sugiero que cree una clase simple para mantener sus datos, cuyos casos llevan el estado utilizado por los bloques durante el procesamiento y que se pueden archivar fácilmente.

Puede encontrar la respuesta a esto Pregunta interesante. Es relacionado.


Para expandirse, digamos que tenía una clase como:

@interface MyData:NSObject
{
    ... ivars representing work to be done in block
}

- (void) doYourMagicMan;
@end

Entonces podrías:

MyData *myWorkUnit = [MyData new];

... set up myWorkUnit here ...

[something doSomethingWithBlockCallback: ^{ [myWorkUnit doYourMagicMan]; }];

[myWorkUnit release]; // the block will retain it (callback *must* Block_copy() the block)

A partir de ahí, puede implementar el archivo en MyData, guardarlo, etc., la clave es tratar el bloque como el desencadenante para hacer el cálculo y encapsular dicho cálculo y el estado necesario del cálculo en la instancia de la clase MyData.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top