2009-06-23 13 views
5

Tengo una matriz de objetos que se posicionan usando CGPoints. En determinados momentos de mi aplicación, un objeto en la matriz necesita notificar a otros objetos no dispuestos de su posición. Entiendo que NSNotification es la mejor manera de hacerlo, pero no puedo encontrar un ejemplo decente de un "remitente" y un "receptor" para la notificación que envuelve y desenvuelve un CGPoint como información de usuario. ¿Alguien puede ayudar?NSNotification userinfo example?

Respuesta

15

En Cocoa Touch (pero no de cacao), PuntosCg se puede envolver y envolver con

+ (NSValue *)valueWithCGPoint:(CGPoint)point 
- (CGPoint)CGPointValue 

Los valores NSV se pueden almacenar en el NSDictionary pasado como el parámetro userinfo.

Por ejemplo:

NSValue* value = [NSValue valueWithCGPoint:mypoint]; 
NSDictionary* dict = [NSDictionary dictionaryWithObject:value forKey:@"mypoint"]; 

Y en su notificación:

NSValue* value = [dict objectForKey:@"mypoint"]; 
CGPoint newpoint = [value CGPointValue]; 
+2

en el cacao, puede utilizar NSPointFromCGPoint, a continuación, utilizar de NSValue valueWithPoint: y pointValue. –

+0

O puede compilar con NS_BUILD_32_LIKE_64 predefinido, en cuyo caso NSPoint es un typedef para CGPoint (siempre está en compilaciones de 64 bits). –

1

El objeto userinfo pasado junto con la notificación es simplemente un NSDictionary. Probablemente, la manera más fácil de pasar un CGPoint en la información del usuario sería resumir las coordenadas X e Y en NSNumbers utilizando -numberWithFloat :. A continuación, puede usar setObject: forKey: en el diccionario userinfo usando Xpos e Ypos como teclas, por ejemplo.

Probablemente se podría concluir que hasta en un bonito categoría en NSMutableDictionary, con métodos como setFloat: forKey o algo ...