菜鸟教程小白 发表于 2022-12-12 19:03:39

ios - Xcode 7.3 的 WCSession 问题


                                            <p><p>直升机</p>

<p>在将 Xcode 更新到 7.3 版本之前,我有一个带有 WatchOS 2 应用程序的应用程序, watch 应用程序会调用 <code>func session(session: WCSession, didReceiveUserInfo userInfo: ) {
</code> 并且 iOS 应用程序将选择调用并插入传递的值。一切都很好。 </p>

<p>但是自从更新到 Xcode 7.3 后我注意到一个问题,<code>func session(session: WCSession, didReceiveUserInfo userInfo: ) {
</code> 被调用两次 <strong>ONLY</strong> 在 iOS 应用程序第一次启动时,如果应用程序正在运行或在后台,则该函数只被调用一次。 </p>

<p>如果我传递值 1、5 和 10 并且 iOS 应用程序未运行,则添加值 1、5、10、1、5 和 10。但是,如果应用程序以任何形式运行,则会添加值 1、5 和 10。 </p>

<p>知道为什么吗?</p>

<p>这是来自 WatchOS 方面的代码,我自己确实想到了这一点,但根据我的测试,它们只被调用一次。我做了很多测试,这只会在 iOS 应用程序启动时发生,而不是在后台运行时发生。 </p>

<pre><code>@IBAction func ConfirmButtonPressed() {

    let applicationDict = [&#34;Amount out&#34;:self.AmountText    ]// Create a dict of application data
      //applicationDict = [&#34;status&#34;:   &#34;0&#34;   ]// Create a dict of application data
    WCSession.defaultSession().transferUserInfo(applicationDict)
}
</code></pre>

<p>这是来自应用委托(delegate)的 iOS 应用代码</p>

<pre><code>func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: ?) -&gt; Bool {

    if (WCSession.isSupported()) {
      print(&#34;xyz3&#34;)
      session = WCSession.defaultSession()
      session.delegate = self
      session.activateSession()
    }
</code></pre>

<p>.......</p>

<pre><code>func session(session: WCSession, didReceiveUserInfo userInfo: ) {

    var status = false
    var AmountUILabel = &#34;&#34;

          status = false
         AmountUILabel= userInfo[&#34;Amount out&#34;]as! String
      print(userInfo[&#34;Amount out&#34;])

    let i=NSString (string:   AmountUILabel ).doubleValue
      let when = NSDate()
   let list : =controller.viewControllers!
    let j = list.topViewControlleras! AllEntriesTableViewController

    j.AddAmount(i , date:when, what: &#34;---&#34;, status: status)
   }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>经过一整天的研究,我终于找到了答案。
我应该用 <code>dispatch_async</code></p> 开始 <code>didReceiveUserInfo</code>

<p>这修复了它并提高了 watch 应用程序和 iOS 应用程序之间的通信速度。 </p>

<pre><code>func session(session: WCSession, didReceiveUserInfo userInfo: ) {
    dispatch_async(dispatch_get_main_queue()) {
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - Xcode 7.3 的 WCSession 问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/36213857/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/36213857/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Xcode 7.3 的 WCSession 问题