2014-08-30 72 views
-2

我是Objective-C編程的新手。我想從應用程序進入後臺的UILabel和至少NSLog中獲取文本。但我得到的只是一個空值(我不知道爲什麼!)。我用故事板創建視圖和的UILabel,我已經使用CTRL +拖曳鉤標籤,我的代碼和合成,在實現文件。但我只是在AppDelegate.m代碼中得到一個空值。如何從Xcode中的AppDelegate.m文件更新UILabel的文本?

這是我的代碼:

ViewController.h:

@property (strong, nonatomic) IBOutlet UILabel *Mylabel; 

ViewController.m:

@synthesize Mylabel; 

AppDelegate.m:

#import "ViewController.h" 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    ViewController * viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    NSLog(@"%@",[[viewController Mylabel] text]); 
} 

回答

0
ViewController * viewController = (ViewController *)self.window.rootViewController; 
NSLog(@"This is my text: %@", viewController.Mylabel.text); 

當你是新來的Objective-C,我要指出,你不應該每過你的資本屬性值(AKA Mylabel)。總是使用駱駝案件的屬性和方法。方法使用[]來調用您使用的屬性。符號來訪問和設置。您也不需要綜合Mylabel,因爲這是爲您自動完成的。我建議您查看由raywenderlich.com提供的Apprentice圖書以適應速度。

+0

好吧,通常我不會在意......但爲什麼有人真的爲我投票。如果有人不同意我上面提到的任何內容或我的回答,我會喜歡一個很好的解釋。特別是因爲我上面提到的所有內容都是正確的,而我提到的方法是由Apple自己定義的。如果你向我投這個票,解釋爲什麼(並且不要誤導人們新到Objective-C) – TheCodingArt 2014-08-30 20:54:45

+0

謝謝你的每一個想法。 – 2014-08-30 21:34:34

+0

沒問題,祝你好運,我們作爲Objective C(和即將到來的Swift)認識和愛的旅程。 – TheCodingArt 2014-08-31 00:13:51

1

您在applicationDidEnterBackground:方法AppDelegate.m中創建ViewController的新實例,而不是訪問現有實例。作爲一個快速解決方案,您應該找到self.window.rootViewController指向您的現有實例。因此,將您的代碼更改爲:

NSLog(@"Label text is %@",self.window.rootViewController.Mylabel.text); 

請注意使用「點」符號來訪問屬性(這很容易)。而FYI傳統認爲,房產以小寫字母開頭;你可能想將Mylabel改爲myLabel,以便養成習慣!

+0

謝謝,這就是我一直在尋找的。謝謝。但TheGamingArt有更好的答案 – 2014-08-30 21:33:14