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.