如何访问Apple WatchKit WKInterfaceController列表

时间:2015-04-22 16:00:38

标签: ios objective-c watchkit

在我的手表扩展代码中,我试图阻止在某些情况下显示第二个接口控制器。我的解决方案需要查看活动视图控制器列表。

有谁知道如何获取所有活动接口控制器的列表?您可以使用self.navigationController.viewControllers在iOS中执行此操作,但我在WatchKit中找不到导航控制器。

我已多次阅读Apple Watch Programming Guide,但他们没有解决这个问题。既然你可以推动&弹出接口控制器,必须有一个由操作系统保存的列表,但我怀疑该列表没有编程访问权限。

2 个答案:

答案 0 :(得分:1)

因为您可以传递任何有效的上下文并在awakeWithContext:中访问它,所以我使用了将引用视图控制器的引用与我的WatchKit应用程序中的其他上下文捆绑在一起的技术。这不仅可以让你建立一个呈现的界面控制器列表,而且还允许你做一些事情,比如分配代表,告知控制器有趣的事件等等。我已经发布了我的JBInterfaceController项目在GitHub上:https://github.com/mikeswanson/JBInterfaceController

答案 1 :(得分:0)

您可以尝试通过创建自己的列表来解决此问题,并将其保存在NSUserDefaults中,例如:

您应该在初始ViewController

的初始化中清除它
- (instancetype)init {
    self = [super init];
    // get user defaults
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    // empty the array at application launch
    [defaults setObject:[[NSMutableArray alloc] init] forKey:@"activeVCs"];
    [defaults synchronize];

    return self;
}

然后在其他ViewController中,您可以在激活/停用控制器时添加和删除此列表:

- (void)willActivate {
    // get list of VCs
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *listOfVCs = [defaults objectForKey:@"activeVCs"];
    [listOfVCs addObject:@"VC1"];

    // save array and sync
    [defaults setObject:listOfVCs forKey:@"activeVCs"];
    [defaults synchronize];

    [super willActivate];
}

- (void)didDeactivate {

    // get list of VCs
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *listOfVCs = [defaults objectForKey:@"activeVCs"];

    // remove VC if exists
    if ([listOfVCs containsObject:@"VC1"]) 
        [listOfVCs removeObject:@"VC1"];

    // save array and sync
    [defaults setObject:listOfVCs forKey:@"activeVCs"];
    [defaults synchronize];

    [super didDeactivate];
}