我构建了一个用于管理设备的应用。我在使用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
答案 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
因此,您可以将所有密钥作为您在评论中编写的个人密钥,或者在特定密钥中设置值而不是存储在单个密钥中