2013-07-29 80 views
0

將以xml文件形式與其他元素進行身份驗證時,會給出「令牌」。如何使一個變量可用於全局目標c

我設法提取令牌,並將其顯示在調用類中,讓我們說parser.m。

但是,我需要使該變量的內容全局可用,以便我可以重複使用相同的標記。我怎麼做?

請注意,下一次驗證時會給出不同的令牌。

.H:

@interface Parser : NSObject <NSXMLParserDelegate>{ 
NSXMLParser *parser; 
NSMutableString *element; 
NSMutableString *token;} 
@property (nonatomic, retain) NSMutableString *token; 
@end 

的.m:

#進口 「Parser.h」

的NSLog(@ 「標記與從主叫:%@」,parser->令牌) ;

這是無法訪問已下parser.m

如何解決此去申報的「令牌」?

更新1: 我發現使用@public也可以達到目的。不知道它是否是一個好的舉措,因爲我將在我的所有API調用中需要令牌。

+0

使用'parser.token'代替'parser-> token'? –

回答

1

對於臨時變量,請考慮使用單例實例,例如此答案中說明的MySingleton類。如何創建一個單身人士:What should my Objective-C singleton look like?。 您可以像這樣訪問變量:[MySingleton sharedSingleton].variable;如果您有很多全局變量,Singleton是一個不錯的選擇,但是如果只有一個更好使用NSUserDefaults。

NSUserDefaults適用於需要持久性的事物,即您計劃在應用程序啓動之間存儲它們。好首發:http://mobile.tutsplus.com/tutorials/iphone/nsuserdefaults_iphone-sdk/

也請閱讀:Are global variables bad?

+0

+1鏈接至全局變量問題 –

0

試試這個:

[[NSUserDefaults standardUserDefaults]setObject:_YourObject_ forKey:@"token"]; 

NSString *str = [[NSUserDefaults standardUserDefaults] stringForKey:@"token"]; 

或者您可以使用單。

0

嘗試將該變量聲明爲Appdelegate作爲屬性並在.m中同步它。或使用這種方法在任何類別中使用變數。

AppDelegate * appdelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; 
    AppDelegate.yourvarible; 

或者您使用NSUserDefault。

[[NSUserDefaults standardUserDefaults]setObject:token forKey:@"tokan"]; 
+3

我怎麼知道,你有複製的第一個問題嗎?因爲你犯了同樣的錯誤TOKAN – Andrea

2

在.h文件中

#import <Foundation/Foundation.h> 

    @interface Singleton : NSObject 
    { 
      ///...... 
    } 

    + (Singleton *)sharedSingleton; 

創建全局變量,一個單獨的類目標C

。米文件

#import "Singleton.h" 

    @implementation Singleton 
    static Singleton *singletonObj = NULL; 

    + (Singleton *)sharedSingleton 
    { 
      @synchronized(self) 
      { 
        if (singletonObj == NULL) 
          singletonObj = [[self alloc] init]; 
      } 
      return(singletonObj); 
    } 

和在另一文件

#import "Singleton.h" 
    //..... 

    Singleton *sinObj = [Singleton sharedSingleton]; 

使用和創建內部的變量,並且還寫setter和getter方法,用於單獨的類變量。訪問此方法和變量使用sinObj singleton類的對象

0

您可以在您的appdelegate中創建一個屬性,並在您獲取令牌時設置該屬性。

//getter 
NSString *token=[(MyAppDelegate *)[[UIApplication sharedApplication] delegate].recievedToken; 

//setter 
[(MyAppDelegate *)[[UIApplication sharedApplication] delegate].recievedToken=token; 
2

IMO單身人士是一個過度使用的詛咒。
你(每)應用程序應具有層結構,並且該令牌變量不應該離開通信層。如果是這樣,這意味着您的應用程序設計出了問題。請注意,令牌僅用於發佈帖子,其他代碼部分不需要。

+0

有一件事情比單身人士差。這就是使用NSUserDefaults作爲全局數據存儲。 ;-) –