NSLog mit CGPoint-Daten

93

Ich habe einen CGPoint namens Punkt, dem eine Berührung zugewiesen wird:

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self];

Ich möchte den x-Koordinatenwert in mein Konsolenprotokoll aufnehmen:

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

Wenn ich dies verwende, lautet die Protokollausgabe dafür:

x: (null)

Ich habe überprüft, dass der Punkt nicht null ist, wenn dies mit dem Debugger und der Variablenüberwachung aufgerufen wird.

Jede Hilfe geschätzt,

Vielen Dank // :)

Spanky
quelle

Antworten:

259

Der einfachste Weg, a zu protokollieren, CGPointist:

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

Das Desktop-Kakao-Äquivalent ist NSStringFromPoint().

Jens Ayton
quelle
Das ist noch besser. Die erste Antwort ist der einfachste und leichteste Weg. Aber das bringt mir sowohl x als auch y aus dem CGPoint in einem Satz. Schön :) Tolles Tool :)
Spanky
Da StackOverflow es für angebracht hielt, diese Frage wieder in meinen RSS-Feed aufzunehmen, kann ich auch meine allgemeine Lösung aufpeppen : jens.ayton.se/blag/almost-elegant-cave-man-debugging , mit der Sie JA_DUMP(point);„point = { 43, 96} ”protokolliert, ohne sich um Formatcodes kümmern zu müssen.
Jens Ayton
Wie verwende ich Ihre Bibliothek, da sie auf I386, aber nicht auf ARM kompiliert wird? Ich meine, wie kann ich damit an iOS-Projekten arbeiten?
Dan Rosenstark
Zunächst müssen Sie die Datei FindAlignment.c als iOS-App erstellen und auf einem Gerät (nicht einem Simulator) ausführen. Kopieren Sie dann das Ergebnis in einen neuen # elif-Block vor dem #else in Zeile 172 in JAValueToString.m. Wenn dies nicht funktioniert, ist zusätzliches Debugging erforderlich. Ich kann es nicht tun, da ich nicht im iOS-Programm bin.
Jens Ayton
3
Erwähnenswert ist auch, dass NSStringFromCGRect () ebenfalls vorhanden ist.
DJSKinner
24

point.x ist eine Gleitkommazahl, daher sollten Sie Folgendes verwenden:

NSLog(@"x: %f", point.x);
Philippe Leybaert
quelle
9

Der einfachste Weg, einen CGPointWert zu protokollieren , ist die Verwendung der NSValueKlasse, da Sie alle relevanten Werte erhalten, die für die Konsole gut formatiert sind. Es ist so gemacht:

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

Sie können auch die Methoden +valueWithCGRectund +valueWithCGSizeverwenden, NSValuewenn Sie versuchen, beispielsweise die Eigenschaften frame( CGRect) oder size( CGSize) von a zu protokollieren UIView.

Nathan de Vries
quelle
1

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

Nicki
quelle
0

point.x ist eine Gleitkommazahl, daher sollten Sie wie folgt codieren:

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);
Arun
quelle
Wenn du einen String-Wert haben willst, heißt das, dass du ihn einfach benutzt !!
4
Sie machen eine unnötige Formatzeichenfolge innerhalb einer Formatzeichenfolge. Die Ansätze von Philippe und Ahruman sind viel einfacher und erzielen genau die gleichen Ergebnisse.
Brad Larson
0

verwenden :

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

Sie können NSString auch für folgende Informationen verwenden:

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets

Aks
quelle