Ist es möglich, C-Strukturen (wie CGRect oder CGPoint) mit NSLog zu protokollieren?

Lesezeit: 3 Minuten

Ich möchte in der Lage sein, C-Strukturen zu debuggen, ohne jede Eigenschaft, aus der sie bestehen, explizit eingeben zu müssen.

dh ich möchte in der Lage sein, so etwas zu tun:

CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);

Offensichtlich funktioniert das ‘%@’ nicht, daher die Frage.

  • NSLog(@”%@”, CGRectCreateDictionaryRepresentation(rect));

    – Abhishek Bedi

    20. November 2012 um 10:16 Uhr

  • Probieren Sie LOG_EXPR aus der VTPG_Common-Bibliothek aus: vgable.com/blog/tag/log_expr

    – Lernen Sie Cocos2D

    16. September 2013 um 13:42 Uhr

Benutzeravatar von Alex
Alex

Sie können dies versuchen:

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

Es gibt eine Reihe von Funktionen bereitgestellt von UIKit die die verschiedenen CG-Strukturen in konvertieren NSStrings. Der Grund, warum es nicht funktioniert, ist, weil %@ bezeichnet ein Objekt. EIN CGPoint ist eine C-Struktur (und so sind CGRects und CGSizes).

  • Mit AppKit auf OS X müssten Sie in eine konvertieren NSPoint und dann anrufen NSStringFromPoint. Zum Beispiel: NSStringFromPoint(NSPointFromCGPoint(point))

    – Alex

    22. August 2012 um 17:56 Uhr

  • NSLog(@”%@”, CGRectCreateDictionaryRepresentation(rect));

    – Abhishek Bedi

    20. November 2012 um 10:16 Uhr

  • Ähnlich wie UI-, MK-, CL-Präfixe, die zwar alle eine Bedeutung haben und eine entsprechende .h-Datei wie :UIKit, MapKit, CoreLocation importieren müssen; Bedeutet das CG-Präfix, dass ich etwas importieren sollte? Wenn nicht, ist es nur eine Namenskonvention?!

    – mfaani

    16. März 2016 um 20:42 Uhr

Steves Benutzeravatar
Steve

Es gibt einige Funktionen wie:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

Ein Beispiel:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));

  • Dies sind die: “Einzige Sache in der gesamten iOS-Entwicklung, die am nützlichsten, aber am wenigsten bekannt ist” !! Heh

    – Fett

    21. Februar 2014 um 15:12 Uhr

  • Hinweis: Für die Cocoa (OS X)-Entwicklung haben diese Funktionen kein „CG“ im Namen.

    – Peterflynn

    22. Juli 2015 um 22:41 Uhr

NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));

Ich verwende das folgende Makro, um mir mit NSRect zu helfen:

#define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f",
    #RECT, RECT.origin.x, RECT.origin.y, RECT.size.width, RECT.size.height)

Sie könnten etwas Ähnliches für CGPoint tun:

@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
    #POINT POINT.x, POINT.y);

Verwenden Sie es wie folgt:

LogCGPoint(cgPoint);

Würde folgendes produzieren:

cgPoint: (100, 200)

Sie können verwenden NSValue dafür. Ein NSWert Objekt ist ein einfacher Container für ein einzelnes C- oder Objective-C-Datenelement. Es kann alle skalaren Typen wie int, float und char sowie Zeiger, Strukturen und Objekt-IDs enthalten.

Beispiel:

  CGPoint cgPoint = CGPointMake(10,30);
    NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);

AUSGANG : NSPoint: {10, 30}

Hoffe es hilft dir.

Benutzeravatar von Hussain Shabbir
Hussain Shabbir

Ja, Sie können die folgenden Funktionen verwenden: Zuerst müssen Sie die CGPoint-Struktur in eine Zeichenfolge konvertieren, siehe Beispiel

1) NSStringFromCGPoint,  
2) NSStringFromCGSize,  
3) NSStringFromCGRect,  
4) NSStringFromCGAffineTransform,  
5) NSStringFromUIEdgeInsets,

Zum Beispiel:

1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));

So was…

Benutzeravatar von NANNAV
NANNAV

Da der kaputte RSS von Stack Overflow diese Frage gerade für mich wiederbelebt hat, hier ist meine fast allgemeine Lösung: JAValueToString

Damit können Sie schreiben JA_DUMP(cgPoint) und bekomme cgPoint = {0, 0} protokolliert.

  • Ich habe das getan und ich habe einen Kompilierungsfehler erhalten. Manchmal ist die Adresse des Eigenschaftsausdrucks erforderlich oder so

    – Benutzer4951

    19. Juni 2011 um 10:58 Uhr

  • @Jim Thio: Das Makro ist so eingerichtet, dass das zu untersuchende Objekt ein lvalue sein muss. (Ich kann mich nicht erinnern, warum; etwas darüber, dass ich C-Strings sonst nicht richtig handhaben könnte.) Kurz gesagt, weisen Sie Ihre Eigenschaft einer temporären Variablen zu und rufen Sie dann JA_DUMP dafür auf.

    – Jens Ayton

    19. Juni 2011 um 22:11 Uhr

1427730cookie-checkIst es möglich, C-Strukturen (wie CGRect oder CGPoint) mit NSLog zu protokollieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy