2009-06-23 12 views
5

Ho una matrice di oggetti posizionati usando CGPoints. In determinati momenti della mia app, un oggetto nell'array deve notificare ad altri oggetti non disposti nella sua posizione. Comprendo che NSNotification è il modo migliore per andare, ma non riesco a trovare un buon esempio di "mittente" e "ricevitore" per la notifica che avvolge e decomprime un CGPoint come userinfo. Qualcuno può aiutare?NSNotification userinfo esempio?

risposta

15

In Cocoa Touch (ma non di cacao), CGPoints possono essere imbustati e non con

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

NSValori possono essere memorizzati nel NSDictionary passato come parametro userinfo.

Ad esempio:

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

E nella notifica:

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

in Cocoa, è possibile utilizzare NSPointFromCGPoint, quindi utilizzare di NSValue valueWithPoint: e pointValue. –

+0

Oppure è possibile creare con NS_BUILD_32_LIKE_64 predefinito, nel qual caso NSPoint è un typedef per CGPoint (è sempre in build a 64 bit). –

1

L'oggetto userinfo passato con la notifica è semplicemente un NSDictionary. Probabilmente il modo più semplice per passare un CGPoint nell'userinfo sarebbe quello di racchiudere le coordinate X e Y in NSNumbers usando -numberWithFloat :. È quindi possibile utilizzare setObject: forKey: sul dizionario utenteinfo utilizzando Xpos e Ypos come le chiavi per esempio.

Si potrebbe forse concludere che fino in una bella categoria sul NSMutableDictionary, con metodi come setFloat: Forkey o qualcosa del genere ...