2016-09-29 4 views
2

IOSからデータを取得できましたが、監視しています。 Watchkit拡張機能でデータを保存すると、IOSはデータを取得できませんでした。それはとても奇妙です。グループを追加してプロフィールを作成しました。次 は私のスニペットです:これは何が起こる原因ですか? NSUserDefaultsはwatchkitのIOSとWatchの間でデータを共有できませんでした。

class InterfaceController: WKInterfaceController { 

@IBOutlet var outputLabel: WKInterfaceLabel! 
override func awake(withContext context: Any?) { 
    super.awake(withContext: context) 

    // Configure interface objects here. 
} 

override func willActivate() { 
    // This method is called when watch view controller is about to be visible to user 
    super.willActivate() 
} 

override func didDeactivate() { 
    // This method is called when watch view controller is no longer visible 
    super.didDeactivate() 
} 


// load the data from the IOS 
@IBAction func loadData() { 
    let userDefaults = UserDefaults.standard 
    userDefaults.synchronize() 
    let outputData = userDefaults.string(forKey: "share") 
    self.outputLabel.setText(outputData) 
} 
} 

class ViewController: UIViewController { 

@IBOutlet weak var inputData: UITextField! 
@IBOutlet weak var inputLabel: UILabel! 
@IBOutlet weak var outputLabel: UILabel! 

// input string into the fieldText and save them in Group by NSUserDefaults 
@IBAction func saveData(_ sender: AnyObject) { 
    let inputData1 = self.inputData.text 
    self.inputLabel.text = inputData1 
    let userDefaults = UserDefaults.standard 
    userDefaults.setValue(inputData1, forKey: "share") 

    userDefaults.synchronize() 
    self.outputLabel.text = userDefaults.string(forKey: "share") 

} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 
+0

はあなたが確認することができますエンタイトルメントファイルのappグループ –

+0

確認方法私はグループを作成し、私のプロジェクトでgroupName.entitiementsを見つけることができました。それは仕事ですか? – Maxwell

+0

はい。それは私が話していることです。目的の共有値にアクセスするには、要求時にそのアプリケーショングループ名を指定する必要があります。このように:[[NSUserDefaults alloc] initWithSuiteName:appGroup] –

答えて

1

アプリエクステンションバンドルは、そのアプリのバンドル内にネストされていますが、実行中のアプリエクステンションとアプリを含むものは、お互いのコンテナに直接アクセスすることはできません。

データ共有を有効にするには、Xcodeまたはデベロッパーポータルを使用して、含むアプリとそれに含まれるアプリの拡張機能のアプリグループを有効にします。次に、ポータルにアプリグループを登録し、それを含むアプリで使用するアプリグループを指定します。

アプリグループを有効にすると、アプリの拡張機能とそのアプリを含むアプリは両方ともNSUserDefaults APIを使用してユーザーの設定にアクセスできるようになります。

// Create and share access to an NSUserDefaults object 

NSUserDefaults * sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName: @"com.example.domain.MyShareExtension"]; 

// Use the shared user defaults object to update the user's account 

[sharedDefaults setObject:@"Your Value" forKey:@"Your Key"]; 

迅速

客観共有グループCの識別子を渡し、新しいNSUserDefaultsオブジェクトをインスタンス化する方法:この共有を有効にするには、initWithSuiteNameを使用

func saveUserDefaults() { 

let sharedDefaults = NSUserDefaults(suiteName: "com.example.domain.MyShareExtension") 
    sharedDefaults?.setObject("Your Value", forKey: "Your Key") 
    sharedDefaults?.synchronize() 

} 
+0

xcodeで "gourp.xxx.xxx"というグループを作成します。アプリグループを有効にすると、自分のプロジェクトでxxxx.entitlementが見つかります。しかし、時計とiPhoneの間でデータを共有することはできません。構成を設定する際に問題がありますか? – Maxwell

+0

ありがとう、私の友人。私は理由を見つける。 WatchOS2.0アプリケーショングループは、もはや異なるデバイスとデータを共有できませんでした。 WCSessionを使用して、さまざまなデバイスと通信する必要があります。 – Maxwell

1

あなたは、デバイス間で共有userdefaultsを作成したい場合は、以下を使用する必要があります。

UserDefaults(suiteName: "GROUP NAME")!.object(forKey: "share") 

SET

UserDefaults(suiteName: "GROUP NAME")!.set("Test", forKey: "share") 

GETグループ名はあなたが設定したグループ名ですあなたのアプリケーショングループを作成しました。

+0

私はこのようにテストします。共有を使用するグループを作成し、appグループを有効にして、groupOS.entitlementのファイルをwatchOSプロジェクトで見つけることができました。私が見つけられなかった何か悪いことはありますか? – Maxwell

+0

ありがとう、私の友人。私は理由を見つける。 WatchOS2.0アプリケーショングループは、もはや異なるデバイスとデータを共有できませんでした。 WCSessionを使用して、さまざまなデバイスと通信する必要があります。 – Maxwell

関連する問題