2017-10-17 102 views
0

我試圖從我的iPhone應用程序共享一個字符串到我的WatchKit應用程序。我爲iOS應用和WatchKit擴展啓用了App Groups。然後,在我的iOS應用程序,我在ViewController設置了UserDefaults變量...從iPhone發送字符串到WatchKit應用程序

let defaults = UserDefaults(suiteName: "group.com.jacobcavin.appName") 

然後,我設置默認值從文本字段的文本字符串...

defaults?.set(textField.text!, forKey: "KEY") 

在iOS應用程序內部,這個功能完美,我可以訪問它並獲得正確的值。但是,在WatchKit內部應用程序,我試圖讓弦...

let defaults = UserDefaults(suiteName: "group.com.jacobcavin.appName") 
let string = defaults?.string(forKey: "KEY") 

string回報nil。我瀏覽了大量的教程,並且確保每個目標都具有相同的組標識符,不同的Bundle標識符,並且entitlement.plist文件是正確的。你能幫忙嗎?

+1

您必須使用WatchConnectivity框架,手機和手錶無法通過應用程序組進行共享,因爲watch os 1 – dan

回答

0

A UserDefaults應用程序組無法使用手錶應用程序擴展程序。您需要使用WCSession發送一個applicationContext到手錶,然後在手錶中將這些值設置爲其UserDefaults

例如在iPhone上,您可以激活WCSession.default並致電try WCSession.default.updateApplicationContext(applicationContext),其中applicationContext[String : Any]。如果擴展程序位於前臺,應用程序上下文將發送至手錶,或者將在下次啓動應用程序時將應用程序上下文傳送至擴展程序。

爲了應對在手錶的應用程序擴展的背景下,激活默認會議聲明自己是一個代表接收新的應用程序上下文:

func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { 
     // handle receiving application context 
     DispatchQueue.main.async 
     { 
      // Save to UserDefaults or Update UI etc. 
     } 
} 

一個有些過時的例子可以發現here。該過程仍然相同,但代碼尚未更新。

相關問題