2015-04-22 54 views
1

在我的手錶擴展代碼我試圖避免在某些情況下第二個接口控制器的顯示。我的解決方案需要查看活動視圖控制器的列表。如何訪問蘋果WatchKit WKInterfaceController列表

有誰知道如何讓所有的活動接口控制器的列表?您可以使用self.navigationController.viewControllers在iOS中執行此操作,但我無法在WatchKit中找到導航控制器。

我已經通過Apple Watch Programming Guide讀了很多次,但他們不解決這個問題。由於您可以推&彈出界面控制器,必須有一個由操作系統保存的列表,但我懷疑沒有編程訪問該列表。

回答

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]; 
} 
1

因爲你可以通過任何有效的上下文和訪問它在awakeWithContext:,我使用捆綁在我WatchKit應用附加上下文沿着到所述呈現視圖控制器的引用的技術。這不僅讓你積聚呈現接口控制器的列表,但它也可以讓你做的事情一樣指派的代表,告知有趣的活動的控制器,等我發表了我的JBInterfaceController項目在GitHub上:https://github.com/mikeswanson/JBInterfaceController