2015-08-27 92 views
1

我是新來的swift編程。我正在用Facebook登錄創建一個應用程序,它運行良好。問題是,我想在其他視圖控制器中檢索用戶詳細信息。我的問題是:
Is it possible to store the user details and can be fetched to the entire app using NSUserDefaults using swift
如果是,然後告訴正確的方式來設置和加載用戶的詳細信息。 在我viewDidLoad中()使用NSUserDefaults存儲Facebook用戶詳細信息

let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setObject(self.facebookReadPermissions, forKey: "User") 
    NSUserDefaults.standardUserDefaults().synchronize() 

在登錄按鈕:

@IBAction func btnlogin(sender: UIButton) { 

    var fbLoginManager : FBSDKLoginManager = FBSDKLoginManager() 
    fbLoginManager .logInWithReadPermissions(self.facebookReadPermissions, handler: { (result, error) -> Void in 
     if (error == nil){ 
      var fbloginresult : FBSDKLoginManagerLoginResult = result 
      if(fbloginresult.grantedPermissions.contains("email")) 
      { 

       self.performSegueWithIdentifier("showView", sender: self) 
       self.fetchUserInfo() 
       var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 

       if let myEmail: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("User") { 
        println(myEmail) 
       } 

       fbLoginManager.logOut() 
      } 
     } 
    }) 
} 

回答

0

Fromt他所提供的資料很少,我想你想存儲的用戶名或一些細節,然後檢索他們在其他一些ViewControllers稍後再顯示帳戶信息或其他內容。

對於小數據量,它可以非常簡單高效地完成。

此代碼片段將幫助您保存用戶名,如果不存在,然後檢索。

class UserDetail{ 

//create a singleton 
static let sharedInstance = UserDetail() 
private init(){} //make it explicit singleton 

func saveUserName(username:String, key:String){ 
    if let _ = NSUserDefaults.standardUserDefaults().objectForKey(key){ 
     return  //we already have 
     //or choose to edit it and save it again 
    }else{ 
     NSUserDefaults.standardUserDefaults().setObject(username, forKey: key) 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 
} 

func getUserName(key:String)->String?{ 
    return NSUserDefaults.standardUserDefaults().objectForKey(key) as? String 
} 

} 

我基本上是用單,並用它從其他類,如

class A{ 
func loginSave(){ 
    UserDetail.sharedInstance.saveUserName("Bj", key:"username") 

} 
} 

class B{ 
func loginGet(){ 
    let name = UserDetail.sharedInstance.getUserName("username") 
} 
} 

我希望它能幫助。乾杯!

+0

感謝@kandelvijaya爲你的建議,實際上我想從Facebook獲取用戶的詳細信息,如用戶名,電子郵件,Facebook的ID。當我使用Facebook sdk登錄時,所有的細節都想在本地存儲,並且我想要檢索值並使用println語句顯示爲o/p,因此用戶的詳細信息也可以用在其他一些視圖控制器中。有沒有可能 –

+0

是的! NSDefaults是關鍵值對的全局容器。對於通常爲字符串的每個唯一鍵,您可以具有Int,Double,Char,String,基元數組和基元字典的值。原始數據表示舊的基本數據類型String,Int,Double。 – kandelvijaya

+0

好吧,我知道了..但我沒有任何想法來實現代碼,你可以請建議我..我在問題中添加了整個代碼 –