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

Antworten:


259

Der einfachste Weg, a zu protokollieren, CGPointist:

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

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


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);

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.


1

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


0

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

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.