2009-06-23 10 views
5

Ich habe ein Array von Objekten, die mit CGPoints positioniert werden. Zu bestimmten Zeiten in meiner App muss ein Objekt im Array andere nicht gruppierte Objekte über seine Position informieren. Ich verstehe, dass NSNotification der beste Weg zu gehen ist, aber ich finde kein anständiges Beispiel für einen "Absender" und "Empfänger" für die Benachrichtigung, die einen CGPoint als Benutzerinfo umschließt und auspackt. Kann jemand helfen?NSNotification Benutzerinfo Beispiel?

Antwort

15

In Cocoa Touch (aber nicht Cocoa), kann CGPoints mit

verpackten und unverpackten werden

NSValues ​​können im NSDictionary gespeichert werden, das als userinfo-Parameter übergeben wird.

Zum Beispiel:

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

Und in Ihrer Meldung:

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

In Cocoa, können Sie NSPointFromCGPoint verwenden, dann NSValue des valueWithPoint benutzen und Pointvalue. –

+0

Oder Sie können mit NS_BUILD_32_LIKE_64 vordefiniert erstellen, in diesem Fall NSPoint ist ein Typedef für CGPoint (es ist immer in 64-Bit-Builds). –

1

Das Objekt userinfo, das mit der Benachrichtigung übergeben wird, ist einfach ein NSDictionary. Die einfachste Möglichkeit, einen CGPoint in der Benutzerinfo zu übergeben, wäre, die X- und Y-Koordinaten in NSNumbers mit -numberWithFloat: einzupacken. Sie können dann setObject: forKey: im userinfo-Wörterbuch verwenden, indem Sie beispielsweise Xpos und Ypos als Schlüssel verwenden.

könnten Sie wahrscheinlich, dass einpacken in eine schöne Kategorie auf NSMutableDictionary, mit Methoden wie setFloat: forKey oder etwas ...

Verwandte Themen