UserDefaults.standard.string()返回零

问题描述:

我在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

您应该下面的代码使用与验证,首先删除应用程序,并重新安装。然后使用,你会获得成功。

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"