2014-10-20 2 views
-3

Раньше в приложении Objective-C мне нужно было синхронизировать настройки приложения iOS при запуске в делете приложения. Это давало правильные предпочтения при запуске. Я использовал следующий код (обратите внимание на ссылку на оригинальное сообщение):Как синхронизировать настройки приложения в Swift?

# 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, или попеременно - вы можете ходить со мной через, как преобразовать код выше Свифт.

__

Я установил код ЗАЗ. Эквивалентом метода класса Objective-C (которому предшествует +) является метод типа Swift, который идентифицируется с ключевым словом «class», предшествующим ключевым словам «func override». Я подтвердил, что initialize() правильно называется appDelegate с приведенным ниже кодом.

Несмотря на то, что при загрузке моего приложения на iPhone и при запуске настроек отображаются настройки «ALLOW xxx TO ACCESS» Apple, хотя мои «xxx SETTINGS» отсутствуют. Если я нажму на стрелку назад в настройках, а затем снова нажмите настройки моего приложения - настройки моего приложения теперь присутствуют и остаются доступными для последующих запусков.

Я удалил приложение 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

бы это не просто 'defaults.synchronize()'? –

ответ

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() 
} 
+0

Как это относится даже к вопросу? Я не вижу ничего подобного. –

+0

Ваш пример не скомпилировался правильно. См. Мой вышеприведенный список для грамматически правильной версии, которая пока не отображает предпочтения пользовательского приложения при первой загрузке. – kauai

+0

см. Мой отредактированный ответ – ZAZ

Смежные вопросы