Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone WCSession无法激活_Iphone_Watchkit_Ios9 - Fatal编程技术网

Iphone WCSession无法激活

Iphone WCSession无法激活,iphone,watchkit,ios9,Iphone,Watchkit,Ios9,调用Session.activateSession()方法时,WatchKit连接会话出现问题,无法激活。这是我用来设置会话的代码 if (WCSession.isSupported()) { session = WCSession.defaultSession() session.delegate = self // conforms to WCSessionDelegate session.activateSession() print("Session ha

调用Session.activateSession()方法时,WatchKit连接会话出现问题,无法激活。这是我用来设置会话的代码

if (WCSession.isSupported()) {
    session = WCSession.defaultSession()
    session.delegate = self // conforms to WCSessionDelegate
    session.activateSession()
    print("Session has been activated")
}
但是,我在打印行上放置了一个断点,当我检查session对象时,它说sessionActivated属性仍然为false,即使在调用activateSession之后也是如此。当我调用activate session时,我似乎没有收到任何类型的bug,所以我认为它应该已经工作了,但事实似乎并非如此

此外,如果稍后在代码中尝试对会话对象使用sendMessage方法,如下所示-

let message = ["request": "fireLocalNotification"]
session.sendMessage(
    message, replyHandler: { (replyMessage) -> Void in }) { (error) -> Void in
        print(error.localizedDescription)
    }

我收到了一个错误代码“操作无法完成。(WCErrorDomain错误7004.),我查到了它,意思是“WCErrorCodeSessionNotActivated”。这是我认为activateSession方法调用不正确的另一个原因。在我发送消息之前,我甚至尝试直接在行中运行activateSession方法,但仍然收到错误。如果有人能帮助解释发生了什么,那就太好了,谢谢你!:)

是否使用大数值

NSDictionary *userInfo = @{
                           @"a1":@(1000000000),   // 1000000000
                           @"a2":@(10000000000),  // 1e+10
                           @"a3":@(100000000000), // crash!
                           };
[[WCSession defaultSession] transferUserInfo:userInfo];
在上面的代码中,键“a3”的值是危险的,它会导致Apple Watch崩溃

发送列表后,它将保留在Apple Watch中,直到重新安装Watch应用程序


(此崩溃发生在设备上,而不是模拟器上)

您应该在WatchKit扩展和iOS应用目标上激活WatchConnectivity会话。例如,您可以在InterfaceController的

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    if WCSession.isSupported() {
        let wcsession = WCSession.defaultSession()
        wcsession.delegate = self
        wcsession.activateSession()
        wcsession.sendMessage(["update": "list"], replyHandler: { (dict) -> Void in
            print("InterfaceController session response: \(dict)")
            }, errorHandler: { (error) -> Void in
                print("InterfaceController session error: \(error)")
        })
    }
}
在AppDelegate中

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

    if WCSession.isSupported() {
        let wcsession = WCSession.defaultSession()
        wcsession.delegate = self
        wcsession.activateSession()
    }

    return true
}
我在几个例子中注意到,人们倾向于只在处理请求的类中设置委托,例如,如果手表要向iOS应用程序发送消息,则只会在iOS应用程序中设置委托。这是错误的。正如WatchConnectivity明确指出的那样,您必须在这两种情况下都设置委托,否则将出现7004错误。

由于在Xcode 8中“activateSession()”更改为“activate()”,您需要为类添加和扩展以委托会话(WCSessionDelegate),并使用以下函数对其进行扩展:

func会话(u会话:WCSession,ActivationIDCompleteWith activationState:WCSessionActivationState,错误:错误?)

以确保异步方法“激活”成功完成

就你而言:

extension  YourInterfaceControllerClass : WCSessionDelegate {

    func session(_ session: WCSession,
                 didReceiveMessage message: [String : Any],
                 replyHandler: @escaping ([String : Any]) -> Void)
    {
        //this function is mandatory and can be empty
    }

    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?)
    {

       // Your code to be executed after asynchronous activation is completed:  
       let message = ["request": "fireLocalNotification"]
       session.sendMessage(
       message, replyHandler: { (replyMessage) -> Void in }) { (error) -> Void in
          print(error.localizedDescription)
    }

     //....

   }
}

当此代码运行时,是否有任何内容记录到系统日志中?(如果代码在设备上运行,您可以使用Xcode查看此代码,如果是模拟器,您可以使用调试菜单打开模拟器的系统日志)您是否能够修复它?我也面临相同的错误。