Estoy intentando activar una Notificación en un método llamado setPosition en una clase, que desencadena setViewPointCenter en otra clase. Sin embargo, estoy tratando de enviar un CGPoint junto con él. Pero a Xcode no le está gustando ni un poco.Cocoa: Problema al pasar un CGPoint con NSNotification y NSDictionary
-(void)setPosition:(CGPoint)point
{
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"sp", point, nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"SpriteDidSetPosition"
object:self
userInfo:dict];
[super setPosition:point];
}
desencadena este método en otra clase, pero arroja el error indicado
-(id) init{
// Usual stuff, blah blah blah...
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(setViewPointCenter:)
name:@"BownceSpriteDidSetPosition"
object:nil];
}
-(void) setViewPointCenter:(NSNotification *)notification
{
// ERROR: Invalid Initializer
CGPoint point = [[notification userInfo] valueForKey:@"sp"];
// more code here....
}
que he estado cavando alrededor, y encontró esta solución, pero aún así obtener un error.
-(void)setPosition:(CGPoint)point
{
// ERROR: Incompatile type for argument 1 of "Value With Point"
NSValue *pointAsObject = [NSValue valueWithPoint:point];
NSDictionary *dict = [[NSDictionary alloc]
initWithObjectsAndKeys:@"sp",
pointAsObject,
nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"SpriteDidSetPosition"
object:self
userInfo:dict];
[super setPosition:point];
}
Me está volviendo loco. Y para confundirme aún más, cambiando CGPoint a NSPoint como esto
-(void)setPosition:(NSPoint)point
{
NSValue *pointAsObject = [NSValue valueWithPoint:point];
NSDictionary *dict = [[NSDictionary alloc] init];
[dict initWithObjectsAndKeys:@"sp", pointAsObject, nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"SpriteDidSetPosition"
object:self
userInfo:dict];
[super setPosition:CGPointMake(point.x, point.y)];
}
Get de librarse del error en setPosition, pero todavía estoy atornillado en setViewPointCenter. Y según tengo entendido, CGPoint y NSPoint deberían ser iguales, pero no se ven como lo hacen.
¿Alguien tiene un ejemplo práctico de cómo pasar un CGPoint en un diccionario? No puedo resolverlo.
Esto es para el iPhone, en caso de que eso marque la diferencia.
Desearía haberlo encontrado antes, pero me encontré con esto, que lo explica con más profundidad. http://stackoverflow.com/questions/1032726/nsnotification-userinfo-example – gargantuan