Xcode 7.3

时间:2016-03-25 04:09:21

标签: ios xcode watch-os-2 wcsession xcode7.3

Helo

在将Xcode更新为7.3版本之前,我有一个带有WatchOS 2应用程序的应用程序,手表应用程序将调用func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) { ,iOS应用程序将选择呼叫并插入传递的值。一切都很好。

但是自从更新到Xcode 7.3后,我注意到一个问题,当iOS应用首次启动时,func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) { 被调用两次 ONLY ,如果应用正在运行或是在后台,该函数只被调用一次。

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

知道为什么吗?

以下是WatchOS方面的代码,我自己也考虑过了,但根据我的测试,它们只被调用一次。我做了很多测试,这只是在iOS应用程序启动时才发生,而不是在后台执行时。

@IBAction func ConfirmButtonPressed() {

    let applicationDict = ["Amount out":  self.AmountText    ]// Create a dict of application data
      //applicationDict = ["status":   "0"   ]// Create a dict of application data
    WCSession.defaultSession().transferUserInfo(applicationDict)
}

以下是来自app delegate的iOS应用代码

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    if (WCSession.isSupported()) {
        print("xyz3")
        session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }

..........

func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {

    var status = false
    var AmountUILabel = ""

          status = false
         AmountUILabel  = userInfo["Amount out"]  as! String
        print(userInfo["Amount out"]  )

    let i  =  NSString (string:   AmountUILabel ).doubleValue
      let when = NSDate()
     let list :[AnyObject] =  controller.viewControllers!
    let j = list[1].topViewController  as! AllEntriesTableViewController

    j.AddAmount(i , date:  when, what: "---", status: status)
   }

1 个答案:

答案 0 :(得分:2)

经过一整天的研究,我能够找到答案。 我应该使用didReceiveUserInfo

启动dispatch_async

修复了它并提高了手表应用和iOS之间的通信速度。

func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {
    dispatch_async(dispatch_get_main_queue()) {