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?
5
A
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];
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ś ...
w kakao, można użyć NSPointFromCGPoint, a następnie użyć NSValue za valueWithPoint a pointValue. –
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). –