如何在Swift中同步应用程序首选项?

时间:2014-10-20 16:26:27

标签: ios appsettings

以前,在Objective-C应用程序中,我需要在应用程序委托中启动时同步我的iOS应用程序首选项。这允许在启动时适当的偏好。我使用了以下代码(请注意原始帖子的链接):

# https://www.inkling.com/read/learning-ios-programming-alasdair-allan-2nd/chapter-12/application-preferences
+ (void)initialize {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings"
                                                               ofType:@"bundle"];
    NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle
                                                                         stringByAppendingPathComponent:@"Root.plist"]];

    NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
    NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];

    [defaults registerDefaults:defaultsToRegister];
    [defaults synchronize];
}

有人知道Swift中的等价物,或者是 - 你能指导我如何将上述代码转换为Swift。

__

我修复了ZAZ的代码。 Objective-C类方法(以+开头)的等价物是Swift类型方法,它在'func override'关键字之前用'class'关键字标识。我确认使用以下代码为appDelegate正确调用了initialize()。

虽然,当我的应用程序重新加载到我的iPhone并启动设置时,Apple“允许xxx访问”设置存在,但我的“xxx设置”丢失了。如果我点击“设置”上的后退箭头,然后再次点击我的应用设置 - 我的应用设置现已存在,并可供后续发布使用。

我从手机中删除了Apple Numbers应用,然后重新加载并启动了设置。初始启动时,Numbers应用程序将显示所有设置。因此,存在某种形式的初始加载和/或缓存问题。对此有任何帮助将非常感激。

class override func initialize() {
    if let settingsBundle = NSBundle.mainBundle().pathForResource("Settings", ofType: "bundle") {
      let settings = NSDictionary(contentsOfFile: settingsBundle.stringByAppendingPathComponent("Root.plist"))
      let preferences = settings?.objectForKey("PreferenceSpecifiers") as NSArray
      let defaultsToRegister = NSMutableDictionary(capacity: preferences.count)

      let defaults = NSUserDefaults.standardUserDefaults()
      defaults.registerDefaults(defaultsToRegister)
      defaults.synchronize()
    }
}

1 个答案:

答案 0 :(得分:0)

我已经更改了你的代码,请试一试,希望这次它能解决问题

func initialize() {
    let defaults = NSUserDefaults.standardUserDefaults()
    let settingsBundle = NSBundle.mainBundle().pathForResource("Root", ofType: "plist")
    let settings = NSDictionary(contentsOfFile: settingsBundle!)

    let preferences = settings?.objectForKey("PreferenceSpecifiers") as NSArray

    let defaultsToRegister = NSMutableDictionary(capacity: preferences.count)

    defaults.registerDefaults(defaultsToRegister)

    defaults.synchronize()
}