Objective c 子类化UIWindow-需要预处理器帮助吗

Objective c 子类化UIWindow-需要预处理器帮助吗,objective-c,ios,cocoa-touch,subclass,uiwindow,Objective C,Ios,Cocoa Touch,Subclass,Uiwindow,是的,我知道子类化UIWindow是不受欢迎的,但我的子类化UIWindow仅用于调试目的(一旦检测到特定的运动事件,它将获取当前页面的屏幕截图) 无论如何,我在项目的构建设置中创建了一个名为DEBUG的自定义预编译器标志,但在正确加载/运行时遇到了问题。现在,它不是截图,而是记录运动事件的发生 以下是我在AppDelegate的didFinishLaunchingWithOptions: #if DEBUG DebugWindow *debugWindow = [[DebugWindo

是的,我知道子类化UIWindow是不受欢迎的,但我的子类化UIWindow仅用于调试目的(一旦检测到特定的运动事件,它将获取当前页面的屏幕截图)

无论如何,我在项目的构建设置中创建了一个名为
DEBUG
的自定义预编译器标志,但在正确加载/运行时遇到了问题。现在,它不是截图,而是记录运动事件的发生

以下是我在AppDelegate的
didFinishLaunchingWithOptions:

#if DEBUG
    DebugWindow *debugWindow = [[DebugWindow alloc] init];
    self.window = debugWindow; //'window' is declared in the AppDelegate's @interface file and synthesized as window=_window in the @implementation file  
#else
    self.window = _window;
#endif

    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];

下面是如何使用调试标志

#if DEBUG == 1
#define CMLog(format, ...) NSLog(@"%s:%@", __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);
#define MARK    CMLog(@"%s", __PRETTY_FUNCTION__);
#define START_TIMER NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];
#define END_TIMER(msg)  NSTimeInterval stop = [NSDate timeIntervalSinceReferenceDate]; CMLog([NSString stringWithFormat:@"%@ Time = %f", msg, stop-start]);
#else
#define CMLog(format, ...)
#define MARK
#define START_TIMER
#define END_TIMER(msg)
#endif
这是截图

同样在释放设置中,将标志设置为0 像这样-DDEBUG=0


通过这种方式,您可以实现您想要实现的目标。请告诉我它是否有帮助。

您是如何在项目的生成设置中设置名为DEBUG的自定义预编译器标志的?我转到项目名称的“生成设置”选项卡,单击“添加生成设置”,并将其命名为DEBUG。然后,我打开它创建的树,将
debug
设置为
YES
并将
release
设置为
NO
。我将发布一个屏幕截图和一些代码,以帮助您理解答案。谢谢!这个周末我将深入研究它,一旦我让它工作起来,就给你答案勾选!否则,我会带着一两个问题回到这里:)我现在有时间看一下。我在Xcode 4.0.2或4.2中找不到您正在查看的窗口。我在目标应用程序的“生成设置”下进行了检查。您需要在“生成设置”中设置标志,它可能位于xcode 4中的不同位置。我的版本是3.2.5,所以在google上搜索它或stack overflow,你会找到需要设置此设置的位置。你可以参考我的答案作进一步解释。