2016-04-05 44 views
0

iOS ve WatchOS 2 arasında kullanıcı ayrıntılarını eşzamanlıyorum. WatchKit App gruplarının önceki sürümlerinde bu tercihleri ​​paylaşmak oldukça iyiydi, ancak sürüm 2'de de aynı şey için mücadele ediyorum.WatchOS 2 - iOS UserDefaults paylaşım

Şu anda userInfo dosyasını WCSession 's transferUserInfo: yöntemini kullanarak göndermeyi ve daha sonra bu userInfo dosyasını watchOS kullanıcıDefaults'a kaydetmeyi denedim. Ancak sorun böyle bir ayrıntı için iPhone'un UserInfo'yu göndermesini istemesi gerekiyor. Eğer iPhone uygulaması kullanılmıyorsa o durumda Watch App, userInfo'daki değişikliklerin yansımasını almıyor.

WatchOS 2'de böyle bir uygulama hakkında fikir sahibi olan var mı? Doğru olanı yapıyorum, lütfen bunun hakkında bilgi sahibi olup olmadığınızı belirtin.

cevap

3

Eğer saatte WCSession 's sendMessage API kullanırsanız, zaten çalışmıyorsa iOS uygulamasının arka planında uyandığını görürsünüz.

izle uzatma kodu:: Yani böyle bir şey yapabileceğini

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

iOS uygulaması kodu:

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

Bu yapmanız muhtemelen ediyorum olandan açıkçası daha basittir, ancak size vermelidir fikir

+0

Bu temiz ve basit kod için teşekkürler! – Mrug