2016-06-30 4 views
0

도와주세요. 호스트 응용 프로그램에서 위젯으로 데이터를 전송하는 방법은 무엇입니까? 프레임 워크에서 응용 프로그램과 위젯의 동일한 기능을 사용합니다. 응용 프로그램이 데이터를 받고 위젯이 빈 배열을 반환합니다.호스트 응용 프로그램에서 오늘 위젯에 스위프트 데이터

public func readLED() -> [LEDController] { 
let defaults = UserDefaults.standard() 

if let saved = defaults.object(forKey: "ledControllers") as? NSData { 
    return (NSKeyedUnarchiver.unarchiveObject(with: saved as Data) as! [LEDController]) 
} 
return [] 

}

답변

0

당신은 포함 된 응용 프로그램 및 확장간에 데이터를 공유 할 수 UserDefaults.standard()을 사용할 수 없습니다. Apple에서

는 :

앱 확장 번들이 앱을 응용 프로그램의 번들, 실행중인 앱 확장을 포함하고 포함하는 중첩하더라도

는 서로 다른 컨테이너에는 직접 액세스 할 수 없습니다.

그래서 ....

는 데이터 공유를 가능하게 포함하는 응용 프로그램 및 포함 된 응용 프로그램 확장에 응용 프로그램 그룹을 활성화 엑스 코드 또는 개발자 포털을 사용합니다.

1

내 수준의 영어를 사과합니다.

class UserDefaultDataHelper: NSObject { 
    static func saveKeyToGroupApp(_ value: AnyObject?, withKey key:String) -> Void { 
     UserDefaults(suiteName: "group.com.test")!.set(value, forKey: key) 
     UserDefaults(suiteName: "group.com.test")!.synchronize() 
    } 

    //and to read values 

    static func loadKeyToGroupApp(_ key:String) -> AnyObject? { 
     if let loadedValue = UserDefaults(suiteName: "group.com.test")?.object(forKey: key){ 
      return loadedValue as AnyObject? 
     } 
     return nil 
    } 
} 

및 사용 :

하는 apphost 및 위젯간에 데이터를 공유하려면, 당신은 정적 클래스의 예를 들면,이처럼 userDefault 데이터를 저장해야

let ledcontrollerdata = UserDefaultDataHelper.loadKeyToGroupApp("ledControllers") 

UserDefaultDataHelper.saveKey(yourData as AnyObject?, withKey: "ledControllers") 

을 만 저장하여 이와 같은 데이터의 경우, 여러 앱, 위젯 등에서 동일한 데이터를 공유해야하지만, 번들 ID 그룹이있는 '앱 그룹'에있는 경우에만 해당 데이터를 공유해야합니다. group.com.test에이 번들 ID 그룹을 사용해야하며 두 프로젝트 모두 해당 권한이 있어야하며 기능 -> AppGroups에서 대상을 모두 구성하고 AppGroupDomain을 선택하십시오.

+0

예 이런 방식으로 저에게 도움이되었지만 개발자 계정에 앱 그룹을 설정하는 것이 꽤 필요했습니다. –

관련 문제