在基于页面的WatchKit App中的WKInterfaceControllers之间传递对象

时间:2015-04-20 17:22:31

标签: objective-c segue watchkit

过去我一直在努力奋斗,但是我似乎无法开始工作。我将WatchKit接口连接到我在App-Store中销售的现有iPhone应用程序,该应用程序是在Objective-C中开发的。我只想将一个对象传递到下一个WKInterfaceController,当我滑动到它时。

鉴于WatchKit没有prepareForSegue,并且基于页面的关系段没有标识符(据我所知),这使我能够使用contextForSegueWithIdentifier,我该怎么办?传递一个物体?

我试过了:

 _names = [[NSArray alloc]initWithObjects:@"RootInterfaceController",@"StatusInterfaceController",nil];
NSString *passedBAL=@"TEST";
    _contextObject=[[NSArray alloc]initWithObjects:passedBAL, nil];
    if (firstLoad) {
        [WKInterfaceController reloadRootControllersWithNames:_names
                                                     contexts:_contextObject];
        firstLoad=NO;

-(void)willActivate中,我为_passedBal中的-(void)awakeWithContext:(id)context属性设置了值,并为 BOOL 设置了一个值,以避免无限递归此方法似乎创建(在我看来非常糟糕的修复),但当我到达下一个WKInterfaceController时,值总是为零。当我设置断点并将鼠标悬停在StatusInterfaceController中的变量上时,它似乎设置了值,但是当程序继续执行时,它会立即将其清零,但不会响应我在代码中编写的任何内容。

任何帮助都会受到赞赏,因为我一直在拔掉我的头发,正如我所说,它应该很简单。

  

编辑:

_passedBAL是一个简单的NSString属性,但为了清楚起见,我已经将上面的内容更改为只是一个直接放入数组的NSString,并添加了{{1}代码。在此先感谢:)

在我的 StatusInterfaceController.h 中,我有以下内容:

StatusInterfaceController

在我的 StatusInterfaceController.m 中,我有:

#import <WatchKit/WatchKit.h>
#import <Foundation/Foundation.h>
#import "InterfaceController.h"
@interface StatusInterfaceController : WKInterfaceController
@property (strong, nonatomic) NSString *passedBAL;

@end

1 个答案:

答案 0 :(得分:4)

您可以通过两种方式执行此操作:

在故事板中,您在segue中设置了一个标识符:

enter image description here

然后您可以使用contextForSegueWithIdentifier

- (id)contextForSegueWithIdentifier:(NSString *)segueIdentifier {
     if ([segueIdentifier isEqualToString:@"yourIdentifier"]) {
        return aDictionaryWithYourInformation;
     }
}

或者您可以通过代码传递带有上下文的信息:

[self pushControllerWithName:@"YourViewController"
                     context:aDictionary];

此上下文是字典,您可以在- (void)awakeWithContext:(id)context

中访问此字典

修改

现在我们可以看到更多的代码,在我看来你的重载和awakeWithContext有一些混乱。

在重载方法中,您传递一组上下文,基本上是每个接口的上下文。然后,您在awakeWithContext中收到一个上下文,在您的情况下是您想要的字符串。因此,您的根接口控制器中的awakeWithContext应该是上下文:

- (void)awakeWithContext:context {
    [super awakeWithContext:context];
   NSLog(@"Passed BAL is equal to %@",context);
}

此方法在您的StatusInterfaceController中将为nil,因为您没有向其传递任何上下文。