2015-03-02 51 views
0

我試圖創建一個布爾變量debugMode,並通過幾個不同的類訪問它。這樣我就可以在ViewController中設置它的值,並且可以在我的不同類(SKScene的子類)中訪問它以顯示幀速率,日誌物理值等。創建並訪問不同類別的「debugMode」變量

我已閱讀我需要創建我班的一個實例?我不明白這個計劃如何適用。

我是新來的Objective-C,將不勝感激任何幫助!謝謝!

回答

1

默認解決方案是一個預處理器定義,這是在xcode項目中默認設置的。

因此,在源,你可以把

#ifdef DEBUG 
// code that should only run in Debug Configuration 
#endif 
+0

如果我需要在別處運行調試代碼會怎麼樣?例如,在我的每個場景中確定是否顯示幀速率。 – 2015-03-02 14:24:54

+0

你對「別處」有什麼意思,你可以在任何源代碼文件中使用它。它由編譯器的預處理器處理。 – OliverM 2015-03-02 14:29:39

+0

順便說一句:爲了構建發行版,您必須在使用發行版配置的項目中添加第二個方案。 – OliverM 2015-03-02 14:31:11

-2

所以,如果我得到你的權利,你想要一個給定的類,你可以在整個應用程序的使用而不失類的狀態的一個實例但是這應該只存在於你的代碼的DEBUG版本中?

好的,我們可以使用單一模式與#ifdef DEBUG混合來確定是否處於調試模式。

DebugManager.h

// Our Debug Class that we have just made up. 
// Singleton class 
@interface DebugManager : NSObject 

// Some properties that we want on the class 
@property (nonatomic, strong) NSString *debugName; 
@property (nonatomic, readonly) NSDate *instanceCreatedOn; 

// a method for us to get the shared instance of our class 
+ (id)sharedDebugManager; 

@end 

DebugManager.m

#import "DebugManager.h" 

@implementation DebugManager 

// Create a shared instance of our class unless one exists already 
+ (id)sharedDebugManager 
{ 
    static DebugManager *sharedDebugManager = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedDebugManager = [[self alloc] init]; 
    }); 

    return sharedDebugManager; 
} 

- (id)init 
{ 
    if (self = [super init]) { 
     debugName = @"Debug Instance"; 
     instanceCreatedOn = [NSDate new]; 
    } 

    return self; 
} 

@end 

現在,我們有一個Singleton類設置中,我們可以將下面的行添加到我們的*-Prefix.pch這將給我們的我們可以在整個應用程序中使用的DebugManager類的實例。

#ifdef DEBUG 
    DebugManager *manager = [DebugManager sharedDebugManager]; 
#endif 

請記住,當你想用你的manager情況下,你會因爲在生產環境中運行時,需要將其包裝在#ifdef DEBUG這不會看到manager實例了。所以一定要做到:

#ifdef DEBUG 
    NSLog(@"The DebugManagers instance name is %@", [manager debugName]); 
#endif 

不要忘記添加預處理器宏Xcode中的Build Settings遵循this解答下找出如何做到這一點

如果您有任何問題,只是問之下。

+0

我認爲我們處於同一頁面。爲了澄清,我將在啓動應用程序時將debugMode的值設置爲YES。然後,當我的應用程序運行一個特定的場景時,我可以沿着「if(debugMode){記錄玩家的座標等}」的方式做一些事情。我明白語法會有很大的不同。 – 2015-03-02 15:16:50

+0

你需要做什麼來獲得'DEBUG'變量是你的'Build Settings'搜索'Prepocessor Macros',並在'Debug'選項下添加'DEBUG = 1' ** NOT **釋放選項。 – Popeye 2015-03-02 15:33:14

+0

明白了。我只是設置DEBUG = 1,然後,如你所說,使用#ifdef爲了記錄某些消息。感謝您提供的信息豐富的回覆,我很抱歉,如果我一開始就不清楚。另外,我將如何切換到發行版本? – 2015-03-02 16:03:03