【问题标题】:iOS/Swift 1.2 NSDictionray/Dictionary on NSStandardUserDefaultsNSStandardUserDefaults 上的 iOS/Swift 1.2 NSDictionray/字典
【发布时间】:2023-03-15 21:44:01
【问题描述】:

在“旧”Swift 中,我曾经注册从 .plist 文件加载的默认值,如下所示...

let prefs = NSBundle.mainBundle().pathForResource("UserDefaults", ofType: "plist");
let dict = NSDictionary(contentsOfFile: prefs!);
let defaults:NSDictionary! = dict?.valueForKey("defaults") as! NSDictionary;

NSUserDefaults.standardUserDefaults().registerDefaults(defaults);
NSUserDefaults.standardUserDefaults().synchronize();

在 Swift 1.2 下,我收到错误消息...

无法使用“(NSDictionary!)”类型的参数列表调用“registerDefaults”

所以,发生了一些变化,Swift 不再接受 NSDictionary 作为 registerDefaults 的参数。

那么,鉴于它们不再可互换,我如何将我的 NSDictionary 转换为 Dictionary 对象?

【问题讨论】:

    标签: ios swift dictionary nsdictionary nsuserdefaults


    【解决方案1】:

    您需要提供从 NSDictionary[NSObject:AnyObject] 的类型转换 -

    使用

    let prefs = NSBundle.mainBundle().pathForResource("UserDefaults", ofType: "plist");
    let dict = NSDictionary(contentsOfFile: prefs!);
    let defaults:NSDictionary! = dict?.valueForKey("defaults") as! NSDictionary
    NSUserDefaults.standardUserDefaults().registerDefaults(defaults as [NSObject : AnyObject]);
    NSUserDefaults.standardUserDefaults().synchronize();
    

    【讨论】:

    • 谢谢。这是我的“斗争”。排序和工作!
    • 没问题。如果您删除 !从let defaults:NSDictionary! = ... 然后Xcode 实际上为您建议修复。出于某种原因,它是显式解包的可选项
    • 哈...你是对的。我想我尝试了所有组合和“自动更正”选项,但错过了那个。我想有时会出现盲目的恐慌:)
    • 问题,在您的默认值中:字典声明中的 valueForKey("defaults") 是 pList 中行项目之一的名称吗?展开时我得到零。谢谢!
    【解决方案2】:

    用户默认可以存储 NSDictionary 对象。这些作为 [NSObject : AnyObject] 映射到 Swift:

    试试这个:

    NSUserDefaults.standardUserDefaults().setObject(defaults, forKey: "defaults")
    var isOk = NSUserDefaults.standardUserDefaults().synchronize();
    

    【讨论】:

    • 谢谢...'工作',因为它编译并运行但它实际上并没有注册我的默认值。
    • 此代码会将您的 defaults 字典存储在“默认值”中的单个键下,这不是您想要的
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2016-11-20
    • 2016-08-31
    相关资源
    最近更新 更多