2016-04-05 13 views
0

iOSとWatchOS 2の間でユーザーの詳細を同期しようとしています。WatchKitの以前のバージョンでは、App Groupはこのような設定を共有するのにはかなり効果的でしたが、バージョン2では同じことを苦労しています。WatchOS 2 - iOS UserDefaults sharing

今私はWCSessiontransferUserInfo:メソッドを使用してuserInfoを送信し、そのuserInfoをwatchOSのuserDefaultsに保存しようとしました。しかし、問題はそのような詳細のために、まずiPhoneにUserInfoを送信するように依頼する必要があります。 iPhoneアプリケーションが使用されていない場合、ウォッチアプリはuserInfoの変更を反映していません。

誰もWatchOS 2でこのような実装を考えていますか?誰かがこのことを知っているなら、私は正しいことを提案してください。

答えて

3

WCSessionのAPIを時計に使用すると、iOSアプリがまだ実行されていない場合は、バックグラウンドで起動します。

時計の拡張コード:だからあなたのような何かを行うことができ

[[WCSession defaultSession] sendMessage:@{@"cmd":@"sendUpdate"} replyHandler:nil errorHandler:^{ /*handle errors*/ }] 

iOSアプリのコード:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    <...> 
    [[WCSession defaultSession] setDelegate:self]; 
    [[WCSession defaultSession] activateSession]; 
    <...> 
} 

- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error { 
} 

- (void)sessionDidBecomeInactive:(WCSession *)session 
{} 

- (void)sessionDidDeactivate:(WCSession *)session 
{ 
    [session activateSession]; 
} 

- (void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *, id> *)message { 
    NSString *cmd = message[@"cmd"]; 
    if ([cmd isEqual:@"sendUpdate"]) { 
     [self sendUpdate]; 
    } 
} 

- (void)sendUpdate { 
    WCSession *session = [WCSession defaultSession]; 
    if (session.isWatchAppInstalled && session.activationState == WCSessionActivationStateActivated) { 
     [[WCSession defaultSession] transferUserInfo:[self dictionaryFullOfUpdates]]; 
    } 
} 

これは、あなたはおそらくしたいものよりも明らかに簡単ですが、あなたを与える必要がありますアイデア

+0

このようなきれいで簡単なコードをありがとう! – Mrug