NSLog z danymi CGPoint


93

Mam punkt CGPoint, któremu przypisano dotyk:

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self];

Chcę pobrać wartość współrzędnej x do mojego dziennika konsoli:

NSLog(@"x: %s", point.x);

Kiedy używam tego, dane wyjściowe dziennika to:

x: (null)

Sprawdziłem, że punkt nie jest zerowy, gdy jest wywoływany przy użyciu debugera i obserwatora zmiennych.

Każda pomoc doceniona,

Dzięki // :)

Odpowiedzi:


259

Właściwie najłatwiejszym sposobem zarejestrowania a CGPointjest:

NSLog(@"%@", NSStringFromCGPoint(point));

Pulpitowy odpowiednik Cocoa to NSStringFromPoint().


To jest jeszcze lepsze. Pierwsza odpowiedź to najłatwiejszy i najlżejszy sposób. Ale to daje mi oba x i y z CGPoint w jednym zestawie. Fajnie :) Świetne narzędzie :)
Spanky

Ponieważ StackOverflow uznał za stosowne ponowne wprowadzenie tego pytania w moim kanale RSS, równie dobrze mogę odpicować moje ogólne rozwiązanie: jens.ayton.se/blag/almost-elegant-cave-man-debugging, które pozwala JA_DUMP(point);uzyskać „point = { 43, 96} ”bez martwienia się o kody formatu.
Jens Ayton,

Jak używać twojej biblioteki, skoro kompiluje się na I386, ale nie na ARM? Mam na myśli, jak mogę pracować nad projektami iOS, używając go?
Dan Rosenstark

Najpierw musisz skompilować plik FindAlignment.c jako aplikację na iOS i uruchomić go na urządzeniu (nie na symulatorze). Następnie skopiuj wynik do nowego bloku #elif przed #else w wierszu 172 w JAValueToString.m. Jeśli to nie zadziała, wymagane będzie dodatkowe debugowanie. Nie mogę tego zrobić, ponieważ nie jestem w programie na iOS.
Jens Ayton

3
Warto również zauważyć, że NSStringFromCGRect () również istnieje.
djskinner


9

Najprostszym sposobem zarejestrowania CGPointwartości jest użycie NSValueklasy, ponieważ dostarczy ona wszystkie odpowiednie wartości dobrze sformatowane dla konsoli. Zrobiono to tak:

NSLog(@"myPoint = %@", [NSValue valueWithCGPoint:myPoint]);

Możesz także użyć metod +valueWithCGRecti +valueWithCGSize, NSValuegdy próbujesz zarejestrować, powiedzmy, właściwości frame( CGRect) lub size( CGSize) UIView.



0

point.x jest liczbą zmiennoprzecinkową, więc powinieneś kodować w ten sposób:

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);

Jeśli chcesz wartość String oznacza, że ​​po prostu użyj tego !!

4
Robisz niepotrzebny ciąg formatu w ciągu formatu. Podejścia Philippe'a i Ahrumana są znacznie prostsze i dają dokładnie takie same wyniki.
Brad Larson

0

posługiwać się :

NSLog (@ "% @", NSStringFromCGPoint (punkt));

Możesz również użyć NSString do następujących informacji:

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.