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