2017-08-25 139 views
0

我在Swift中「繼承了」iOS Xcode項目。我從來沒有編寫過Swift或之前使用過Xcode。我將項目從一個用戶帳戶複製到另一個用戶帳戶並將其檢入到git倉庫中。UserDefaults.standard.string()返回零

現在我很害怕(複製,權限?)可能導致應用程序無法正確讀取其設置。因爲UserDefaults.standard.string(forKey: "pref_Foo")返回nil,雖然在Settings.Bundle'sRoot.plist明顯有一個pref_Foo標識符。 該應用程序以前工作過,所以我不知道這突然從哪裏來。 因爲我對XCode並不太熟悉,所以直到現在才調試到應用程序以查看UserDefaults.standard.string(forKey: "pref_Foo")nil

我該如何解決這個問題? 謝謝!

編輯:這是我的代碼部分ViewController.swift

override func viewDidLoad() { 
     super.viewDidLoad() 
    loadSettings() 

...

} 

func loadSettings() 
{ 
    if(UserDefaults.standard.object(forKey: "pref_Foo") == nil) 
    { 
    printf("Error") 
    } 
} 
+0

* userdefaults *數據存儲在設備或模擬器上的沙箱目錄中,而不是存儲在您的代碼中。 – Itachi

+0

我認爲,也許如果xcode無法讀取plist文件,那麼它不會被編譯到應用程序。 – tzippy

+0

在10.3.2和10.3.3之間是否發生了可能對此產生影響的任何事情? – tzippy

回答

0

您應該下面的代碼使用與驗證,首先刪除應用程序,並重新安裝。然後使用,你會獲得成功。

var UserStatus:String { 
    get{ 
     return UserDefaults.standard.object(forKey: "pref_Foo") as? String ?? "0" 
    } 
    set(status){ 
     UserDefaults.standard.set(status, forKey: "pref_Foo") 
     UserDefaults.standard.synchronize() 
    } 
} 

使用的代碼如下所示。

if (UserStatus == "pref_Foo"){ 
    self.logoutSuccess() 
} else { 
    self.loginSuccess() 
} 

在下面給出的一行代碼中更新或設置值非常簡單。

 UserStatus = "pref_Foo"