Ios 从NSUserDefault展开NSMutableArray
我正试图从用户默认值中展开NSMutableArray,但在展开可选值时一直出现错误Ios 从NSUserDefault展开NSMutableArray,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我正试图从用户默认值中展开NSMutableArray,但在展开可选值时一直出现错误意外地发现nil。在获取数组后,我尝试检查nil,但它发生在从UserDefaults获取数组的行上,因此我不知道如何修复此错误。有人能帮忙吗 var classURLs: NSMutableArray = NSMutableArray(); let defaults: NSUserDefaults = NSUserDefaults(suiteName: "group.myCompany.Array")!; cl
意外地发现nil
。在获取数组后,我尝试检查nil,但它发生在从UserDefaults获取数组的行上,因此我不知道如何修复此错误。有人能帮忙吗
var classURLs: NSMutableArray = NSMutableArray();
let defaults: NSUserDefaults = NSUserDefaults(suiteName: "group.myCompany.Array")!;
classURLs = NSMutableArray(object: defaults.objectForKey("Class URLs")!);
NSUserDefaults.objectForKey
返回一个有原因的可选项–如果该键不存在,则返回nil
。你不应该仅仅用强制展开它代码>
最常见的情况是,这是你第一次尝试在没有写的情况下阅读它
在这种情况下,您可能需要一个默认值,可能是一个空数组:
let classURLs = defaults.stringArrayForKey("Class URLs") as? [String] ?? []
(??
如果左侧的值为nil
,则替换右侧的值)
注意,如果您编写Swift时使用Swift数组(例如,[String]
)而不是NSMutableArray
,可能会更好,除非您要做的只是将其直接传递到对Objective-C的调用中
您还可以避免使用通过使用可选链接,将代码>与NSUserDefaults一起使用:
let defaults = NSUserDefaults(suiteName: "group.myCompany.Array")
var classURLs = defaults?.stringArrayForKey("Class URLs") as? [String] ?? []
如果密钥不存在,nil
对象的强制展开(!
)将导致崩溃。你需要对这个案子作出解释
var classURLs = NSMutableArray(object:
NSUserDefaults.standardUserDefaults().objectForKey("foo") ?? [])
注意:从目标C过渡?你不需要分号!;-) 您可能没有名为“类URL”的键。