首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过NSObject通过watchConnectivity发送一个

通过NSObject通过watchConnectivity发送一个
EN

Stack Overflow用户
提问于 2015-12-31 12:01:40
回答 2查看 1.3K关注 0票数 4

我正在开发我们的应用程序的WatchOS 2版本,并且坚持这样一个事实:我只能发送一个带有"updateApplicationContext:(NSDictionary *)“函数的字符串。

我希望我可以在这个NSObject中创建一个带有一些变量作为对象发送的NSDictionary。几天后,我仍然没有找到解决这个问题的办法。是否有通过函数发送NSObject?

如果没有发送NSObject的方法,是否可以发送类似于结构的内容?

我的代码如下:

代码语言:javascript
复制
-(void)updateWatchData
{
    //Objective-C
    if ([WCSession isSupported]) {
        WCSession *session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];

        if(session.isPaired) {
            //Objective-C
            DLog("Sending watch data");
            NSMutableArray *kalenderData = [[NSMutableArray alloc] init];

            for (int i = 0; i < self.dataContainerViews.count; i++) {
                DataContainerView *container = self.dataContainerViews[i];

                if(container.listType == ListGPKalender){
                    for(int j = 0; j < container.tableArray.count; j++){
                        GrandPrix *gp = container.tableArray[j];
                        WatchGrandPrix *watchGp = [[WatchGrandPrix alloc] init];

                        watchGp.gpnaam = gp.gpnaam;

                        [kalenderData addObject:watchGp];
                    }
                }
            }

            NSArray *keys = [NSArray arrayWithObjects:@"kalenderData", nil];
            NSArray *objects = [NSArray arrayWithObjects:kalenderData, nil];
            NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

            NSError *anyError;
            if([[WCSession defaultSession] updateApplicationContext:dictionary error:&anyError]){
                DLog("Data Send!");
            }else{
                DLog("Failed to send data with error: %@", anyError);
            }
        }
    }
}

而NSObject只是:

代码语言:javascript
复制
@interface WatchGrandPrix : NSObject

@property(nonatomic,strong) NSString *gpnaam;

@end

我得到的错误是

发送错误数据失败: Error Domain=WCErrorDomain Code=7010“负载包含不支持的类型。UserInfo={NSLocalizedDescription=Payload包含不支持的类型。,NSLocalizedRecoverySuggestion=Only传递有效类型。}

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-31 17:22:17

您可以将对象转换为属性列表表示(基本上,您有一个字典数组而不是模型对象的数组,其中每个字典都是值的映射,其中键是变量的名称,值是表示值的plist兼容类型)。

另一个降低带宽效率的选择是使对象NSSecureCoding兼容,并使用类似于NSKeyedArchiver的东西将其转换为NSData并发送一个NSData数组。

票数 2
EN

Stack Overflow用户

发布于 2016-01-01 13:46:22

我一直通过将自定义对象序列化为Json字符串来发送自定义对象。为此,我创建了一个可以快速序列化任何对象的github项目。它包括一个操场,演示如何进行序列化/反序列化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34546253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档