2014-10-20 3 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]; 
} 

교대 스위프트의 동등한 알고있는 사람, 또는 - 당신은 스위프트에 위의 코드를 변환하는 방법을 나를 통해 걸을 수 : 다음 코드 (원본 게시물에 대한 링크를 참고)을 사용했다.

__

고정 ZAZ 코드. Objective-C 클래스 메소드 (+가 앞에 붙음)는 'func override'키워드 앞에 'class'키워드로 식별되는 Swift Type 메소드입니다. 아래 코드와 함께 appDelegate에 대해 initialize()가 제대로 호출되었음을 확인했습니다.

내 iPhone에 내 앱이 새로로드되고 설정이 시작되면 "xxx 설정"이 누락되었지만 Apple의 "액세스 허용 xxxx"설정이 표시됩니다. 설정에서 뒤로 화살표를 클릭하면 내 앱 설정을 다시 한 번 클릭합니다. 이제 내 앱 설정이 표시되고 후속 실행에 계속 사용할 수 있습니다.

휴대 전화에서 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

관련 문제