2009-06-23 9 views
5

Mam tablicę obiektów, które są pozycjonowane przy użyciu CGPoints. W pewnych momentach w mojej aplikacji obiekt w tablicy musi powiadamiać inne nieszablonowe obiekty swojej pozycji. Rozumiem, że NSNotification to najlepsza metoda, ale nie mogę znaleźć przyzwoitego przykładu "nadawcy" i "odbiorcy" dla powiadomienia, które opakowuje i rozpakowuje CGPoint jako userinfo. Czy ktoś może pomóc?Przykład NSNotification userinfo?

Odpowiedz

15

W Cocoa Touch (ale nie kakao), CGPoints może być opakowane i rozpakowany z

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

NSValues ​​można przechowywać w NSDictionary podanym jako parametr userinfo.

Na przykład:

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

I w zgłoszeniu:

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

w kakao, można użyć NSPointFromCGPoint, a następnie użyć NSValue za valueWithPoint a pointValue. –

+0

Lub możesz zbudować z predefiniowanym NS_BUILD_32_LIKE_64, w którym to przypadku NSPoint jest typedef dla CGPoint (zawsze jest w kompilacjach 64-bitowych). –

1

Obiekt userinfo przekazany wraz z powiadomieniem jest po prostu NSDictionary. Prawdopodobnie najłatwiejszym sposobem podania punktu CG w informacji o użytkowniku byłoby zawarcie współrzędnych X i Y w NSNumbers za pomocą -numberWithFloat :. Następnie możesz użyć setObject: forKey: w słowniku userinfo używając Xpos i Ypos jako klawiszy na przykład.

Można owinąć pewnie, że się w ładnym kategorii na NSMutableDictionary, metodami takimi jak setFloat: forKey czy coś ...