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 // :)

Spanky
źródło

Odpowiedzi:

259

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

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

Pulpitowy odpowiednik Cocoa to NSStringFromPoint().

Jens Ayton
źródło
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
24

point.x to liczba zmiennoprzecinkowa, więc powinieneś użyć:

NSLog(@"x: %f", point.x);
Philippe Leybaert
źródło
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.

Nathan de Vries
źródło
1

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

Nicki
źródło
0

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

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);
Bieg
źródło
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

Aks
źródło