2016-10-16 1 views
10

그래서 공유 된 UserDefaults를 올바르게 설정하기위한 모든 단계를 살펴 보았습니다.하지만 누락 된 부분이 있습니다.공유 된 UserDefaults가 앱과 확장자 사이에서 올바르게 작동하지 않습니다.

내 앱과 내 확장 프로그램에서 모두 활성화 된 앱 그룹 기능이 있습니다. 모두 같은 제품군 이름 ("group.TestSharedPreferences")를 사용하고 난 이런 식으로 쓰기 : 심지어 단지 "INT"을 설정 한 후 synchronize()를 사용

Preferences.shared.integer(forKey: "INT") // Returns 1 in Container App 
Preferences.shared.integer(forKey: "INT") // Returns 0 in Today Extension 

:

struct Preferences { 
    static let shared = UserDefaults(suiteName: "group.TestSharedPreferences")! 
} 

viewDidLoad에 :

Preferences.shared.set(1, forKey: "INT") 

그리고 읽기를 , 확장에서 검색된 값은 컨테이너 응용 프로그램에 저장된 값이 아닙니다. 내가 누락 될 수있는 것에 대한 아이디어가 있습니까? 고맙습니다!

+0

두 대상의 인 타이틀먼트 파일에 해당 응용 프로그램 그룹이 포함되어 있습니까? –

+0

이 키의 값이'nil' 인 경우'0'이 반환 될 것으로 예상됩니다. 따라서 이것은 오늘 확장 코드에서'Preferences.shared'를 올바르게 정의하지 않았거나 오늘 확장 코드가 호출되기 전에 _before_ 앱이 그 값을 설정할 기회를 얻는다는 표시처럼 보입니다. – matt

+0

가능한 [App 그룹과 앱 간 데이터 통신 및 지속] (http://stackoverflow.com/questions/24015506/communicating-and-persisting-data-between-apps-with-app-groups) – Maetschl

답변

9

단계별로 자세히 살펴볼 것을 권장합니다.

메인 응용 프로그램 : Main App

첫째, 주요 애플 리케이션 및 위젯 확장 모두 앱 그룹 기능이 활성화되어 동일한 활성화 (체크 표시를 설정해야합니다) 응용 프로그램 그룹 이름을 사용해야합니다

오늘 위젯 확장 :

Today Widget Extension

그런 다음 직접 설정/액세스 권한으로 간단한 테스트를 수행하십시오. 당신의 오늘 위젯 확장의의 ViewController에서

if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") { 
    userDefaults.set("test 1" as AnyObject, forKey: "key1") 
    userDefaults.set("test 2" as AnyObject, forKey: "key2") 
    userDefaults.synchronize() 
} 

: 당신의 주요 응용 프로그램의 AppDelegate.didFinishLaunchingWithOptions 방법 (응용 프로그램 그룹 이름과 사용자의 요구에 키 변경)

if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") { 
    let value1 = userDefaults.string(forKey: "key1") 
    let value2 = userDefaults.string(forKey: "key2") 
    ... 
} 

이 작동하는 경우를 문제가 관련 수 있어야합니다 귀하의 Preferences 싱글 톤

+0

좋아,이게 작동하는 것 같았지 만이 경고를 받기 시작했습니다. CFPrefsPlistSource에서 값을 읽지 못했습니다 <....>. 그래서 나는 group.XXXX defaults라는 이름을 바꿨는데 어떤 이유로 지금 올바르게 작동하고있다. 어쨌든 고마워요! – iDeC

+0

동일한 문제가있어서 @iDeC처럼 새로운 sharedContainer를 작성하여 해결했습니다. 그리고 모든 것이 효과가있었습니다. – sambro

관련 문제