NSLog C结构是否可能(如CGRect或CGPoint)?

maz*_*iak 410 c cocoa cocoa-touch objective-c

我希望能够调试C结构,而无需显式键入它们所包含的每个属性.

即我希望能够做这样的事情:

CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
Run Code Online (Sandbox Code Playgroud)

显然'%@'不起作用,因此问题.

Ale*_*lex 801

你可以试试这个:

NSLog(@"%@", NSStringFromCGPoint(cgPoint));
Run Code Online (Sandbox Code Playgroud)

UIKit提供了许多功能,可以将各种CG结构转换为NSStrings.它不起作用的原因是因为%@表示一个对象.A CGPoint是C结构(CGRects和CGSizes 也是如此).

  • NSLog(@"%@",CGRectCreateDictionaryRepresentation(rect)); (18认同)
  • 使用OS X上的AppKit,您需要转换为`NSPoint`然后调用`NSStringFromPoint`.例如:`NSStringFromPoint(NSPointFromCGPoint(point))` (7认同)

小智 230

有一些功能,如:

NSStringFromCGPoint  
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform  
NSStringFromUIEdgeInsets
Run Code Online (Sandbox Code Playgroud)

一个例子:

NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
Run Code Online (Sandbox Code Playgroud)

  • 注意:对于Cocoa(OS X)开发,这些函数名称中没有"CG". (6认同)
  • 这些是:"所有iOS开发中最有用但最不为人所知的单一内容"!! 嘿 (4认同)

Abh*_*edi 17

NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
Run Code Online (Sandbox Code Playgroud)


e.J*_*mes 13

我使用以下宏来帮助我使用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)
Run Code Online (Sandbox Code Playgroud)

您可以为CGPoint做类似的事情:

@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
    #POINT POINT.x, POINT.y);
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

LogCGPoint(cgPoint);
Run Code Online (Sandbox Code Playgroud)

会产生以下结果:

cgPoint: (100, 200)
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用内置的[UIKit字符串转换函数](http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/doc/uid/ TP40006894-CH3-SW34)? (6认同)

Nis*_*agi 9

你可以用NSValue它.一个NSValue对象为单C或Objective-C的数据项的简单容器.它可以包含任何标量类型,如int,float和char,以及指针,结构和对象id.

例:

  CGPoint cgPoint = CGPointMake(10,30);
    NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);
Run Code Online (Sandbox Code Playgroud)

输出: NSPoint: {10, 30}

希望它能帮到你.


Vai*_*dar 6

是的,您可以使用以下几个函数:首先您必须将CGPoint结构转换为字符串,请参阅示例

1) NSStringFromCGPoint,  
2) NSStringFromCGSize,  
3) NSStringFromCGRect,  
4) NSStringFromCGAffineTransform,  
5) NSStringFromUIEdgeInsets,
Run Code Online (Sandbox Code Playgroud)

例如:

1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
Run Code Online (Sandbox Code Playgroud)

像这样...


Jen*_*ton 5

由于Stack Overflow的破解RSS刚刚为我重新提出了这个问题,这里是我几乎一般的解决方案:JAValueToString

这使您可以编写JA_DUMP(cgPoint)cgPoint = {0, 0}记录.