2012-02-13 5 views
2

그래서이 함수는 URL 문자열에서 데이터를 구문 분석하고 레이블을 설정합니다.보기 후 호출 함수

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self parseAndSetLabels]; 
} 

problen는 연결 불량이있는 경우 시간이 걸릴 수 있다는 것입니다 그리고보기는 응용 프로그램의 동결을 좋아하지만보기를 애니메이션하기 전에 실제로 parseAndSetLabels 기능을한다.

그럼 어떻게하면 viewLoad를 만들고 그 후에 내 함수를 실행할 수 있습니까? 대신 (이 순서 등)

있는 NSURLConnection (또는 보조 스레드) 비동기

-(void)main 
{ 
    [self viewDidLoad] 
    [self parseAndSetLabels]; 
} 
+1

- 그들은 같은 일을 수행 할 것입니다. parseAndSetLabels을 호출 한 스레드를 시작한 다음 완료되면 메시지를 게시합니다. – KevinDTimm

+0

귀하의 경우에는 viewDidLoad의 뷰에 일부 초기 데이터 (마지막 세션에서 캐시되었을 수도 있음) 만 채우고 다른 스레드로 이동해야하는 parseAndSetLabels를 시작해야합니다. 이렇게하면 GUI가 멈추지 않습니다. 편집 : 죄송합니다 거의 중복 된 의견을, 나는 그것을 입력하는 데 8 분 걸렸을 것 같아요 :) –

답변

4

Nickolay O.이 말한 것처럼 NSURLConnection을 대리자 메서드와 비동기 적으로 사용하거나 viewDidAppear: 메서드에서 parseAndSetLabels 메서드를 호출 할 수 있습니다.
이 마지막 메서드 내에서 호출을하면 뷰가 나타날 때마다 호출되지만 원하지 않으면이 메서드를 한 번만 호출하면됩니다 (예 :

YourController.h 

@property (nonatomic) BOOL condition; 

YourController.m 

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.condition = YES; 
} 
-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    if (self.condition) 
    { 
     [self parseAndSetLabels]; 
     self.condition = NO; 
    } 
} 
).

그러나 귀하의 경우 NSURLConnection 및 그 대리인이 최상의 솔루션입니다.

+0

이 내 문제를 해결, viewdidappear 찾지 못했습니다. – captencrunch

0

사용.

1

parseAndSetLabels의 내용을 보지 않고 너무 구체적이지는 않지만 일반적으로 viewDidLoad 코드에서 네트워크 작업을 동 기적으로 수행하면 안됩니다. 레이블을 임시 자리 표시 자로 설정하고 비동기 작업 완료시 실행되는 블록을 사용하는 비동기 호출을 시작해야합니다. 비동기 블록 내부에서 레이블의 실제 값을 설정해야합니다.

0

대신보기 컨트롤러를 시작하기 전에 데이터를 다운로드하고 구문 분석 할 수도 있습니다. 따라서 viewDidLoad 메서드의 레이블을 구문 분석 된 데이터로 설정하면됩니다. 그리고 비동기 모드를 사용하는 경우 앱이 connectionDidfinishLoading에서 신호를 받으면 viewcontroller를 시작할 수 있습니다.

당신이 말하는 뷰 컨트롤러가 루트 viewcontroller이면 은 웹 서비스 또는 비동기 호출에 대한 동기 호출을 사용하고 있습니까? 그러나 당신으로부터의 그 입력은 도움이 될 것입니다.

1

당신은 지연과 성능을 원하는 경우 : 두 개의 문 사이에 아무런 차이가 없습니다

[self performSelector:@selector(something) withObject:nil afterDelay:0.0f];