2012-01-16 1 views
0

내 응용 프로그램이로드 할 때 파일 시스템에 파일이 있는지 확인하고, 그렇지 않으면 presentModalViewController를 사용하여 뷰 컨트롤러를 팝업하고 사용자가 해당보기를 사용하여 로그인 한 후 컨트롤러 내 애플 리케이션은 웹에서 일부 데이터를 얻을 예정이다.PresentModalViewController가 워크 플로우를 중지하지 않는다.

내 문제는 presentModalViewController 이후에 뷰 컨트롤러가 팝업되지만 presentModalViewController 이후의 코드는 VC가 반환되기를 기다리지 않고 계속 실행된다는 것입니다.

내 코드 :

- (void)viewDidLoad 
{ 
    [self getPasswordFromFile]; 
    responseData = [[NSMutableData data] retain]; 
    NSString *URL= [NSString stringWithFormat:@"http://localhost/domything/get_status.php?ownerid=%@", nOwnerID]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URL]]; 
    [[NSURLConnection alloc] initWithRequest:request delegate:self];  
    [super viewDidLoad]; 
} 


-(void)getPasswordFromFile 
{ 
    NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docDirectory = [arrayPaths objectAtIndex:0]; 
    NSString *filePath = [docDirectory stringByAppendingString:@"/pwfile"]; 
    NSError *error; 
    NSString *fileContents = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; 
    if(fileContents==nil) 
    { 
     // Show registration screen 
     LoginScreenVC *vcLoginScreen = [[[LoginScreenVC alloc] init] autorelease]; 
     [vcLoginScreen setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
     [self presentModalViewController:vcLoginScreen animated:YES]; 
    } 
    NSArray *arr = [fileContents componentsSeparatedByString:@":"]; 
    // NSLog(@"ownerid is:%@, password is: %@", [arr objectAtIndex:0], [arr objectAtIndex:1]);   
    password = [arr objectAtIndex:1]; 
    nOwnerID = [arr objectAtIndex:0]; 
    [password retain]; 
    [nOwnerID retain]; 
} 

답변

2

이 어떻게 작동하는지 때문입니다. presentModalViewController:animated:은보기 컨트롤러를 모달로 표시 한 다음 반환합니다. 그런 식으로 앱을 분할하고 싶다면 제시된 컨트롤러에서부터 끝난 것보다 부모 컨트롤러에 다시 신호를 보내야하며 필요한 작업을해야합니다.

한 가지 방법은 대리자 패턴을 사용하는 것입니다. 이 작업을 수행하는 방법에 대한 심층적 인 조언을 보려면 Apple doc을 살펴보십시오.

+0

정말요? 나는 모달에 대한 전체적인 생각이 시각이 끝날 때까지 모든 것을 멈추는 것이라고 생각했다. 이것은 나를 슬프게 만든다. –

+0

그건 전혀 작동하지 않습니다. 메인 실행 루프는 모든 터치 이벤트를 처리하고 화면을 그립니다. 프리젠 테이션 후에 멈 추면 터치 이벤트 나 화면 그리기가 더 이상 필요하지 않으므로 모달 뷰 컨트롤러가 나타나거나 대화 할 수 없을 것입니다. – mattjgalloway

+0

고마워, 지금은 문서로 머리를 터뜨릴거야. –