无法设置NSUserDefaults

时间:2016-03-24 06:47:09

标签: ios swift

我构建了一个用于管理设备的应用。我在使用NSUserDefaults启动应用程序时设置了服务器名称,服务器端口,UDID,ErID和Language_pack_enabled等详细信息。但是当我尝试运行应用程序时,它会崩溃,说它是一个错误的指令,当我调试它时,用户默认设置为nil。任何人都可以告诉我如何将设备的服务器名称,端口和ErID设置为设备配置文件中的设备

  

(设置 - >常规 - >设备管理 - >查看详细信息)。

这里的代码如下

Function findvalue(minvalue As Range, indicated As Range, reference As Range) As Variant

For n = 0 To indicated.Rows.Count - 1

Set c = ActiveSheet.Cells(indicated.Row + n, indicated.Column).Find(minvalue.Value, LookIn:=xlValues)

 If Not c Is Nothing Then
    findvalue = c.Address
    findvaluerow = c.Row
    findvaluecolumn = c.Column

   GoTo finish
End If
Next
For n = 0 To reference.Rows.Count - 1
Set c = ActiveSheet.Cells(reference.Row+n, reference.Column).Find(minvalue.Value, LookIn:=xlValues)
    If Not c Is Nothing Then
     findvalue = c.Address
     findvaluerow = c.Row
     findvaluecolumn = c.Column
       GoTo finish
 End If
Next
findvalue = 0
finish:
End Function

2 个答案:

答案 0 :(得分:0)

根据您的数据格式,我建议您创建一个包含所有数据的字典,然后请尝试以下操作:

NSUserDefaults.standardUserDefaults().setObject(dict, forKey: mdmiosagent_Constants.MANAGED_APP_CONFIGURATION)

检查您是否能够在userDefaults中为密钥mdmiosagent_Constants.MANAGED_APP_CONFIGURATION设置值

答案 1 :(得分:0)

为了将值存储在字典中,你需要检查nil并在将字典设置为字典之前用""(some default value)替换不允许任何键的nil值,因此如果任何字符串没有在userdefaults中设置字典密钥在字典中是空白的

您可以使用某些默认值设置所有值,例如“”或类似的东西,将其存储在NSUserDefaults中,之后当您获得实际值更新NSUserDefaults中的值时,您将至少拥有一些值价值,不会在零处理

像这样:

let userDefault = NSUserDefaults.standardUserDefaults()
userDefault.setObject("", forKey:mdmiosagent_Constants.UDIDKEY)
userDefault.setObject("", forKey: mdmiosagent_Constants.SERVERNAMEKEY) 
userDefault.setObject("", forKey: mdmiosagent_Constants.SERVERPORTKEY) 
userDefault.setObject("", forKey:mdmiosagent_Constants.ERIDKEY)
userDefault.setObject("", forKey:mdmiosagent_Constants.MANAGED_APP_CONFIGURATION)
userDefault.synchronize()

然后,当您获得实际值时,您可以使用相同的代码进行更新

在检索时,您可以检查userdefault中是否有内容或是否为空

如果您的值是UDIDKEY

中的字符串,请使用此选项
let userDefault = NSUserDefaults.standardUserDefaults()
userDefault.synchronize()
ket strUdid = userDefault.objectForKey(mdmiosagent_Constants.UDIDKEY)

if (strUdid.characters.count > 0) {
//get the value
}

//或第二路

if (strUdid != "") {
//get the value
}

如果您的对象可以是任何对象,则可以检查对象内的第二个选项或者是否检查任何特定键

由于Ujjwal已经说过你没有在代码中设置mdmiosagent_Constants.MANAGED_APP_CONFIGURATION的值,而在检索时你正在从密钥中获取数据,因此它在启动时找到了nil 因此,您可以将所有密钥作为您在评论中编写的个人密钥,或者在特定密钥中设置值而不是存储在单个密钥中