2013-10-19 303 views
0

我設計了一個登錄應用程序。我已經在sqlite數據庫中輸入了帳戶數據。但是,當我用帳戶用戶名和密碼登錄時,我希望這些可以被所有視圖控制器訪問。因爲我有不同的控制器會更新帳戶的詳細信息。需要實現細節.. 謝謝在Objective C中創建全局變量

+0

您的意思是應用程序可以訪問實際的密碼?這不是一個好主意。像其他人一樣使用鑰匙串。 – jcm

+0

使用DefaultUser ..它可能是最適合你:) – iPatel

回答

1

避免全局變量 ,而您可以使用Singleton類來存儲應用程序範圍的憑據信息。

但請記住,在應用程序中存儲憑據的最佳方式是使用Apple Keychain,您可以在Apple網站上找到API參考。

1

至於有人說 - 避免全局變量,但如果你想他們肯定的 - 不喜歡它的C語言:

在一個文件中

中的所有其他文件

定義這個變量是指其與extern關鍵字

2

使用單:http://www.galloway.me.uk/tutorials/singleton-classes/

我有這樣的一個項目(請注意我用iOS的鑰匙串,而不是一個數據庫,但是我在這裏隱藏這些細節):

@interface User : NSObject 
@property (nonatomic, strong) NSString *username; 

+ (User *)currentUser; 

@end 

@implementation User 

+ (User *)currentUser 
{ 
    static User *currentUser = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     currentUser = [[User alloc] initFromKeychain]; 
    }); 
    return currentUser; 
} 
@end 

有辦法在做單身(取決於你想如何偏執是關於某人是否可以創建類的非單一實例或沒有)很多。這裏的示例:What should my Objective-C singleton look like?

您也可以直接在任何需要的地方直接訪問鑰匙串。你也應該問自己爲什麼你的代碼需要訪問一個用戶名/密碼。聽起來像是一個破碎的設計。

1

簡單地說:不要這樣做!

我建議將證書存儲在鑰匙串中。但不要使用Apple提供的示例代碼。它不起作用。我在我的項目中使用SSKeychain

如果您不需要存儲憑據,您應該像aleroot建議的那樣僅使用一個實例的單例或類。

0

三個答案:

  • 不要這樣做。
  • 如果您必須這樣做,請使用Singleton。
  • 要非常方便地訪問用戶名和非機密(即密碼)變量,請使用NSUserDefaults。
+0

感謝所有的快速建議。我實際上需要在控制器之間訪問的用戶名。所以一旦用戶用他的用戶名(和密碼)登錄,取決於用戶名(從數據庫中選擇),用戶將被賦予某些特權。如何去做這件事? – user2741735

+0

使用NSUserDefaults:https://developer.apple.com/library/mac/documentation/cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference。html NSUserDefault對象通過應用程序關閉和應用程序更新/升級持續存在。如果您的用戶註銷,請確保清除該對象。 – ArtSabintsev