Czy można Nslogować struktury C (takie jak CGRect lub CGPoint)?

Chcę mieć możliwość debugowania struktur C bez konieczności jawnego wpisywania każdej właściwości, z której się składają.

Tzn. chcę móc zrobić coś takiego:

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

Oczywiście '% @ ' nie zadziała, stąd pytanie.

Author: mazniak, 2009-02-15

8 answers

Możesz spróbować tego:

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

Istnieje wiele funkcji dostarczonych przez UIKit , które konwertują różne struktury CG na NSString s. powodem, dla którego nie działa, jest to, że %@ oznacza obiekt. A CGPoint jest strukturą C (podobnie jak CGRect s I CGSize s).

 786
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-13 19:31:25

Istnieje kilka funkcji takich jak:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets

Przykład:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
 225
Author: steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-13 19:04:41
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
 16
Author: Abhishek Bedi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-20 10:17:14

Używam następującego makra, aby pomóc mi z NSRect:

#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)
Możesz zrobić coś podobnego dla CGPoint:
@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
    #POINT POINT.x, POINT.y);

Używając go w następujący sposób:

LogCGPoint(cgPoint);

Daje następujące:

cgPoint: (100, 200)
 13
Author: e.James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-15 03:50:53

Możesz użyć NSValue do tego. Obiekt NSValue jest prostym kontenerem dla pojedynczej pozycji danych C lub Objective-C. Może zawierać dowolne typy skalarne, takie jak int, float i char, a także wskaźniki, struktury i identyfikatory obiektów.

Przykład:

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

Wyjście : NSPoint: {10, 30}

Mam nadzieję, że ci to pomoże.
 9
Author: Nishant Tyagi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-08 12:33:05

Ponieważ zepsuty RSS Stack Overflow właśnie wskrzesił mi to pytanie, oto moje prawie ogólne rozwiązanie: JAValueToString

To pozwala zapisać JA_DUMP(cgPoint) i uzyskać cgPoint = {0, 0} zalogowany.

 5
Author: Jens Ayton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 06:05:23

Tak, możesz użyć poniżej kilku funkcji, takich jak: Najpierw musisz przekonwertować strukturę cgpoint na ciąg znaków, patrz przykład

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

Na przykład:

1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
W ten sposób...
 5
Author: Vaibhav Shiledar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-09 18:40:51
NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect));
 3
Author: Uday.M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-30 09:02:11