2014-08-30 2 views
-2

Objective-C 프로그래밍의 새로운 기능입니다. 나는 UILabel과 최소한 NSLog에서 텍스트를 얻고 싶습니다. 어플리케이션이 백그라운드에 들어갈 때입니다. 하지만 내가 가진 모든 것은 null 값입니다. (나는 왜 그런지 모르겠다!). 나는 스토리 보드를 사용하여 뷰를 만들고 UILabel과 CTRL + Drag를 사용하여 레이블을 코드에 연결하고 구현 파일에서이를 합성했습니다. 하지만 AppDelegate.m 코드에서 null 값을 얻었습니다.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 book에 의한 iOS를 보는 것을 추천한다.

+0

... 좋아, 일반적으로 나는 상관하지 않겠지 만 ... 왜 누군가 실제로 이걸 투표 해 줬어? 누군가 내가 위에서 말한 것과 답한 것에 동의하지 않는다면 좋은 설명을 좋아할 것입니다. 특히 위에서 언급 한 모든 내용은 정확하지만 내가 언급 한 방법론은 Apple에 의해 정의됩니다. 이 점에 대해 찬성표를 던지 셨다면 이유를 설명해주십시오 (그리고 Objective-C에 대한 새로운 사람들을 잘못 인도하지 마십시오). – TheCodingArt

+0

모든 생각에 감사드립니다. –

+0

우리가 알고 있고 Objective C (그리고 다가오는 Swift)로 사랑하는 여정에서 행운을 빈다. – TheCodingArt

1

기존 인스턴스에 액세스하는 대신 메서드가 AppDelegate.m 인 ViewController의 새 인스턴스를 만듭니다. 빠른 수정으로 기존 인스턴스에 self.window.rootViewController을 가리켜 야합니다. 코드를 다음과 같이 변경하십시오 :

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

속성에 액세스하려면 '도트'표기법을 사용하십시오 (더 쉽습니다). 그리고 참고로, 전통에는 소문자로 시작하는 속성이 있습니다. Mylabel을 myLabel로 변경하여 습관을 들여야 할 수도 있습니다.

+0

감사합니다. 고맙습니다. 그러나 TheGamingArt는 더 나은 대답을했습니다. –