如何在iWatch的两个视图控制器之间传递数据?

4

我正在制作一个向iwatch发送通知的应用程序。我想在下一个视图控制器中显示通知消息,如何从通知视图控制器传递数据到基于页面导航的下一个视图控制器?


请回答一下,如果有人对此有任何想法,先谢谢了。 - user4221623
有其他人关于这个问题有更多的信息吗?请参考以下对话。 - user4221623
你最终解决了这个问题吗?我也遇到了完全相同的问题。我没有通过编程方式推送控制器,因此我的contextForSegue没有被调用。页面控制器有两个视图。我该如何传递数据呢? - Bach
3个回答

4

官方文档中得知:

当推送一个新的界面控制器时,建议使用pushControllerWithName:context:方法传递上下文对象。上下文对象是你向新的界面控制器通信的唯一方式,以确定它应该展示什么。上下文对象既可以是现有的数据对象,也可以是你动态创建并填充相关信息的字典。

如果您更喜欢使用segue来初始化界面控制器之间的层次结构导航,则WatchKit会根据segue源是表行还是按钮调用contextForSegueWithIdentifier:inTable:rowIndex:或contextForSegueWithIdentifier:方法。 使用这些方法提供所需的上下文对象以初始化新的界面控制器。


1
谢谢,杰克。但我的contextForSegueWithIdentifier:方法没有被调用。我正在使用故事板的分页导航。 - user4221623
即使我在NotificationController中使用动态通知控制器,我的处理远程通知的handleActionWithIdentifier方法也没有被调用,我是否漏掉了什么? - user4221623
你确定把Storyboard界面的类设置成了你的自定义类吗? - Jack
是的,动态通知界面设置为默认的通知控制器,其他设置为自定义类。 - user4221623

2
如果你想传递数据,那么只需使用以下代码...
NSString *a = @"a";
NSString *b = @"b";

[self pushControllerWithName:@"DetailViewController" context:[NSDictionary dictionaryWithObjectsAndKeys:a, @"name",b,@"id", nil]];

并前往push视图并记录其上下文。
- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];

    NSLog(@"context %@",context);
}

在上下文中查看字典格式,您可以在推送视图之前进行设置。


0

我在这里找到了答案

基本上,你需要重新加载你想要传递上下文的控制器(或页面)。

// Inside Init or awakeFromContext of "Page1"
// Reload the next controller and pass the context or data you want
[WKInterfaceController reloadRootControllersWithNames:@[@"Page2"] contexts:@[someData]];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接