以前,在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()
}
}
答案 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()
}