1)當你說'代碼不運行'你的意思是?也就是說,如果你把NSLogs放在applicationDidBecomeActive中:並且在setLabel中它是否顯示代碼正在運行?
2)我會懷疑代碼正在運行。但是你的代碼不會「在那個時候在任何視圖控制器打開時顯示計數器」。您的代碼會創建一個新視圖(視圖1),但該視圖不會顯示。它不作爲子視圖添加到任何東西。你的代碼也會泄漏。您創建了一個W1G1對象,但它永遠不會被釋放,並且會丟棄對它的任何引用。
爲了實現你想要的,你可以在應用程序的窗口中添加一個子視圖。根據您的應用程序代理是如何設置的,像下面應該做的伎倆:
counter++;
W1G1 *viewController1 = [[W1G1 alloc] initWithNibName:@"W1G1" bundle:nil];
[viewController1 setlabel: counter];
[[self window] addSubview: [viewController1 view]]
// you'll want to save a reference to the viewController somehow so you can release it at a later date
在W1G1
然後
- (void) setlabel: (int) counter;
{
NSString *string = [NSString stringWithFormat:@"%d", counter];
vocabword.text = string;
}
有,當然,很多其他的方法,你可以邁出這問題。而且您需要一些策略來移除您在某個階段添加的W1G1視圖,否則您只會添加更多視圖。
更新:你問(在評論中)如何跟蹤你的viewController整個應用程序的生命週期...一種方法是跟蹤它在你的appDelegate中。在頭部碰到這樣的:
@class W1G1;
@interface MyAppDelegate : : NSObject <UIApplicationDelegate>
{
// other decelerations
int counter;
W1G1 * _myW1G1
}
@property (nonatomic, retain) W1G1* theW1G1
在.m文件包括
@synthesize theW1G1 = _myW1G1;
大概在應用中:didFinishLaunchingWithOptions:創建的viewController,設置屬性引用它,並添加其視圖視圖層次結構。
W1G1* theViewController = [[W1G! alloc] initWithNibName: @"W1G1" bundle: nil];
[[self window] addSubview: [theViewController view]];
[self setTheW1G1: theViewController];
[theViewController release];
然後,當你想從應用程序的委託使用[自theW1G1],例如再次訪問的viewController
[[self W1G1] setlabel: counter];
什麼是 「不跑」 呢?你有錯誤嗎? – jtbandes
標籤不變。我通過調試器運行它,並且代碼塊正在工作,計數器和字符串根據需要進行更新,但標籤不會更改。但是,當我從我的viewController檢查計數器的值時,它顯示更新的值。但標籤根本沒有更新。 – Prajoth
如果W1G1是UIViewController子類或UIView子類。如果前者,變量名稱view1是一個不尋常的選擇。您發佈的內容不清楚您的標籤如何添加到視圖層次結構中。根本沒有在視圖層次結構中更新的標籤? – Obliquely