2015-06-17 56 views
-1

我有一個WKInterfaceController的WatchKit應用程序,InterfaceController.m。它創建分頁內容是這樣的:如何讓Apple Watch更新使用WKInterfaceController reloadRootControllersWithNames創建的頁面:上下文?

- (void)willActivate { 
    [super willActivate]; 
    NSDate *now = [[NSDate alloc] init]; 
    NSDictionary *time = @{@"time":[NSString stringWithFormat:@"%f",[now timeIntervalSince1970]]}; 
    NSArray *contexts = [[NSArray alloc] initWithObjects:time,time,nil]; 
    NSArray *names = [[NSArray alloc] initWithObjects:@"page",@"page",nil]; 
    [WKInterfaceController reloadRootControllersWithNames:names contexts:contexts]; 
} 

的WKInterfaceController以「頁」的標識符稱爲PageInterfaceController.m,只是顯示由InterfaceController.m

- (void)awakeWithContext:(id)context { 
    [super awakeWithContext:context]; 
    [label setText:[context objectForKey:@"time"]]; 
} 

發送的時間這個偉大的工程第一它的時間被加載,但在退出並重新啓動應用程序後,它顯示了舊時代。我怎樣才能讓應用程序返回到InterfaceController.m並更新時間?

是的,我知道我可以把時間放在PageInterfaceController中,但在我的真實應用程序中,InterfaceController獲取位置數據並將其發送到頁面,甚至確定要創建的頁面數量。

您可以在這裏下載的全樣本項目:

​​

回答

-1

awakeWithContext不會被調用如果手錶保持加載的控制器,這可能是爲什麼它沒有得到後第二次更新初始負載。

而是使用viewWillActivate在PageInterfaceController就像你在你的主InterfaceController做的,是這樣的:

- (void)viewWillActivate { 
    [super viewWillActivate]; 
    [label setText:[context objectForKey:@"time"]]; 
} 
+0

viewWillActivate將只顯示與以前相同的上下文。它需要返回到初始的InterfaceController以獲取新的位置數據。 –

+0

你的問題對這個問題太模糊了。如果問題是您無法讓原始控制器更新數據,請停止嘗試強制其執行該操作。把一個類放在可以爲兩個控制器獲取數據的上下文中並使用它。 –

+0

順便說一句,我無法想象爲什麼有人想要幫助你的機會,如果你想減少答案,最終不會是正確的。大多數人只會冷靜地回答這些簡單的問題,而不是最終沒有幫助的答案。 –

0

解決方法是使用一個計時器,並使其返回到第一接口控制器一定時間後。不是很理想,因爲我希望有一種方法可以在每次啓動手錶應用程序時從第一個界面控制器開始。

- (void)awakeWithContext:(id)context { 
    [super awakeWithContext:context]; 
    time = [context objectForKey:@"time"]; 
} 

- (void)willActivate { 
    [super willActivate]; 
    NSDate *now = [[NSDate alloc] init]; 
    double diff = [now timeIntervalSince1970] - [time doubleValue]; 
    if (diff > 30) { 
     NSArray *contexts = [[NSArray alloc] initWithObjects:@"",nil]; 
     NSArray *names = [[NSArray alloc] initWithObjects:@"main",nil]; 
     [WKInterfaceController reloadRootControllersWithNames:names contexts:contexts]; 
    } else { 
     [label setText:[NSString stringWithFormat:@"%@",time]]; 
    } 
相關問題