2014-12-09 1 views
0

저는 iOS 개발자가 상당히 새롭습니다. 나는 .. 이것에 대한 답변을 찾을려고 노력했지만 명확한 해결책이없는 UILabel을 다른보기로 업데이트하십시오.

나는 FirstView.m

라는 전망이 있고 백그라운드 작업이 실행되는 AppDelegate.m

있다 AppDelegate.m에서 전화에 가장 가까운 비컨에 따라`text '변수를 업데이트합니다.

앱이 FirstView에있을 때 AppDelegate의 변수 텍스트에 따라 FirstView 내부의 UILabel을 업데이트하려고합니다.

나는 1 초마다 AppDelegate의 변수가 변경되었는지 여부를 확인하는 FirstView에서 백그라운드 스레드를 실행하여 수행 할 수 있음을 알고 있지만 이것이 나에게 효율적이지는 않지만 두 가지 실행 점이 없다. 동일한 작업에 대한 백그라운드 스레드

내 질문에, 거기에 AppDelegate에서 레이블을 업데이트하는 방법이 있습니까? performSelectorOnMainThread 행에 뭔가가 있습니까?

감사합니다.

당신은 AppDelegate에있는 사용자 정보 사전에 텍스트 알림을 게시 할 수
+0

당신은'UINavigationController'를 사용하고 있습니까? –

+0

? FirstView.m은 탐색 스택에 있습니다. 아마도 그렇습니다. 그러나이 과정에서 FirstView.m에서 아무 데나 탐색하지 않을 것입니다. –

+0

UINavigationController를 사용하는 경우 ... xibs 또는 스토리 보드를 사용하고 있습니까? 귀하의 애플 리케이션 대리인에 UINavigationController 또는 UINavigationControllerDelegate에 대한 언급이 있습니까? 스토리 보드는 UINavigationController로 시작합니까? –

답변

0

언제 값이 변경 있음 :

text = [iBeacon updateText]; // just a random method name I made up 
[[NSNotificationCenter defaultCenter] postNotificationName:@"textChanged" 
                object:self 
                userInfo:@{@"text":text}]; 

는 그 다음 FirstView 당신이 viewDidLoad 정상적으로 (UI를 업데이트 할 것을 통지를 수신 할 수 있습니다 또는 in viewDidAppear:). 메모리 누수가 없도록 View Controller가 FirstView 어딘가에 할당 해제되기 전에 등록을 취소해야합니다. 당신은 다음과 같이 등록 할 수 있습니다 UI

을 등록 및 업데이트 예 :

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(handleTextChanged:) 
              name:@"textChanged" 
              object:nil]; 

는 그 다음 UI 업데이트 :

- (void)handleTextChanged:(NSNotification *)notification 
{ 
    // Be sure to update the UI on the main thread 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.label.text = notification.userInfo[@"text"]; 
    }); 
} 

마지막을, 알림의 등록을 취소 :

[[NSNotificationCenter defaultCenter] removeObserver:self]; 
+0

고마워요! 그게 바로 제가 찾고 있던 것입니다! 사실 NSNotifications에 대해서는 아직 읽지 않았습니다. 이 문제에 대해 더 이상의 질문이 있으면 게시하겠습니다! –