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?
5
A
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];
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 ...
in Cocoa, è possibile utilizzare NSPointFromCGPoint, quindi utilizzare di NSValue valueWithPoint: e pointValue. –
Oppure è possibile creare con NS_BUILD_32_LIKE_64 predefinito, nel qual caso NSPoint è un typedef per CGPoint (è sempre in build a 64 bit). –