【发布时间】:2014-12-15 17:10:02
【问题描述】:
以前,在一个 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()
}
}
【问题讨论】:
-
不就是
defaults.synchronize()吗?
标签: ios appsettings