HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 数据未在真实设备上从iphone传输到iWatch(AppleWatch)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_197_1@
我有一个iOS应用程序,我在appleWatch上编写了一个扩展程序.
我正在使用transferUserInfo方法将数据(NSDictionary)发送到appleWatch扩展.一切都在模拟器中工作,但是当我试图在真实设备上运行应用程序时,似乎iWatch没有收到任何东西,然iPhone正在发送数据(我发现这是因为我调试了发送方).

我已经在两侧配置了WCSession.我已经在我应该接收数据的类中符合WCSessionDelegate.
我正在使用session:didReceiveUserInfo:方法来接收ExtensionDelegate中的数据但仍然像我说的一切在模拟器中工作正常但没有在真实设备上传输.

有没有人知道问题是什么?

这是代码
在发件人方面:

在我的班级MensaViewController.m中

- (void)viewDidLoad
   if ([WCSession isSupported]) {
        session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
   }
   NSLog(@"A dish is being sent");
  [session transferUserInfo:dishDictionary];
}

dishDictionary在viewDidLoad方法中声明,它包含数据.

在接收器端(观看扩展)
我配置WCSession并在ExtensionDelegate.m中接收数据,如下所示:

- (void)applicationDidBecomeActive {
    if ([WCSession isSupported]) {
        session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
        NSLog(@"Session activated in iWatch");
    }
}

我有这个方法来接收数据:

- (void)session:session didReceiveUserInfo:(NSDictionary<NSString *,id> *)userInfo{

    NSLog(@"Received data from the iPhone");

    NSArray<NSString*> *DictionaryKeys = userInfo.allKeys;
    for(int i = 0; i < DictionaryKeys.count; i++){
        Boolean equalsMensaString = [DictionaryKeys[i] isEqualToString:@"beilagen"];
        if(equalsMensaString)
            [self handleTransferredDish:userInfo];

        Boolean equalsNewsString = [DictionaryKeys[i] isEqualToString:@"article"];
        if(equalsNewsString)
            [self handleTransferredNews:userInfo];

        Boolean equalsEventString = [DictionaryKeys[i] isEqualToString:@"description"];
        if(equalsEventString)
            [self handleTransferredEvents:userInfo];

    }
}

解决方法

如果您查看源函数说明,可以看到用于传输数据的方法的说明:

public func transferUserInfo(userInfo: [String : AnyObject]) -> WCSessionUserInfoTransfer

所以..当您实际使用该应用程序时,无法保证系统会发送此userInfo.

请改用以下方法

public func sendmessage(message: [String : AnyObject],replyHandler: (([String : AnyObject]) -> Void)?,errorHandler: ((NSError) -> Void)?)

并接收:

func session(session: WCSession,didReceivemessage message: [String : AnyObject],replyHandler: ([String : AnyObject]) -> Void)
session.sendmessage(messageData,replyHandler: { (replyData) -> Void in
            replyHandler?(replyData)
            },errorHandler: { (error) -> Void in
                print("error: code:\(error.codE) - \(error.localizedDescription)")
                errorHandler?(error)
                 do {
                        try session.updateApplicationContext(messageData)
                    } catch {
                        print("There was an error trying to update watchkit app on the BACkground")
                    }
        })

并确保通过正确实施来收到此案例

func session(session:WCSession,didReceiveApplicationContext applicationContext:[String:AnyObject])

大佬总结

以上是大佬教程为你收集整理的ios – 数据未在真实设备上从iphone传输到iWatch(AppleWatch)全部内容,希望文章能够帮你解决ios – 数据未在真实设备上从iphone传输到iWatch(AppleWatch)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。