2016-04-05 13 views
0

Ich versuche Benutzerdetails zwischen iOS und WatchOS 2 zu synchronisieren. In früheren Versionen von WatchKit App Gruppen war ziemlich gut, solche Präferenzen zu teilen, aber in Version2 kämpfe ich für das gleiche.WatchOS 2 - iOS UserDefaults teilen

Im Moment habe ich versucht, userInfo mit 's transferUserInfo: Methode zu senden und dann diese userInfo in WatchOS userDefaults zu speichern. Aber das Problem ist, für solche Details muss Watch zuerst das iPhone bitten, UserInfo zu senden. Wenn die iPhone-Anwendung nicht verwendet wird, wird Watch App in diesem Fall keine Änderungen von userInfo widerspiegeln.

Hat jemand eine Idee für eine solche Implementierung in WatchOS 2? Mache ich das Richtige, bitte schlage vor, wenn jemand davon Kenntnis hat.

Antwort

3

Wenn Sie die API sendMessage auf der Uhr verwenden, wird die iOS-App im Hintergrund aktiviert, wenn sie nicht bereits ausgeführt wird. So könnte man so etwas wie:

Uhr Dateisuffix:

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

iOS App-Code:

- (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]]; 
    } 
} 

Das ist natürlich einfacher als das, was Sie wahrscheinlich tun, aber sollte Ihnen die Idee

+0

Danke für solchen sauberen und einfachen Code! – Mrug

Verwandte Themen