过去我一直在努力奋斗,但是我似乎无法开始工作。我将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
答案 0 :(得分:4)
您可以通过两种方式执行此操作:
在故事板中,您在segue中设置了一个标识符:
然后您可以使用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,因为您没有向其传递任何上下文。