2012-08-26 2 views
1

보기 컨트롤러가 있는데, UINavigationController입니다. 어느 시점에 (navigationcontroller pushViewController: animated:) 두 번째보기가 푸시되어 나중에 루트보기로 돌아 오는 단추가있는 세 번째보기가 푸시됩니다. (popToRootViewController: animated:). 문제는보기가 루트에 다시 팝업 된 후 루트보기의 viewWillApper 메소드가 호출되지 않는다는 것입니다. 확인하기 위해 몇 가지 중단 점을 설정 했으므로 통과하지 못했습니다. viewWillApper에 배치 된 루트보기의 일부 내용을 다시로드하는 방법이 있으며 popToRootViewController: animated 이후 완전히 전달되는 방법이 있습니다. 무슨 일이 벌어지고 있는지 알고 싶습니까?viewWillAppear 메서드가 popToRootViewController 이후에 호출되지 않는다

감사합니다.

+0

다양한 유형의보기 컨트롤러를 함께 중첩 시키십니까? 분명히 그것은 지원되지 않습니다 ... http://stackoverflow.com/questions/6859868/popping-viewcontroller-doesnt-call-viewwillappear-when-going-back – RonLugge

답변

0

popToRootViewController 이후에 내 대리인 메서드를 사용하여 내보기를 강제로 업데이트했습니다. 내 rootViewController가 네트워크 업로드 클래스를 호출하고 완료되면 rootViewController의 양식 필드를 재설정하려고했습니다. 나는 '

//my upload is done within a completion block so I know when 
//it's finished 
typedef void(^myCompletion)(BOOL); 

-(void) uploadAssessment:(myCompletion) compblock{ 
    //do the upload 
    sharedManager=[MyNetwork sharedManager]; //create my instance 
    sharedManager.delegate=self; //set my rootViewController as the network class delegate 
    int numWritten= [sharedManager writeAssessments]; 
    compblock(YES); 
} 

#pragma mark - protocol delegate 
-(void)uploadCompleted{ 
    //this is a local method that clears the form 
    [self clearTapped:nil]; 
} 

: 내 rootViewController에서, 그리고

-(int)writeAssessments{ 
    //code here to do the actual upload 
    //..... 

    //this is a non-view class so I use a global navigation controller 
    //maybe not the best form but it works for me and I get the required 
    //behaviour 
    [globalNav popToRootViewControllerAnimated:NO]; 
    [[globalNav.view viewWithTag:1] removeFromSuperview]; 
    [_delegate uploadCompleted]; 
} 

: MyNetworkUploader.m에서

@protocol MyNetworkDelegate <NSObject> 
@required 
- (void) uploadCompleted; 
@end 

@interface MyNetworkUploader : NSObject{ 
    id <MyNetworkDelegate> _delegate; 
} 

@property (nonatomic,strong) id delegate; 

//other properties here 

+(id)sharedManager; 
-(int)writeAssessments; 

@end 

: 네트워크 업로드 클래스에서

, 나는 위임 프로토콜을 만들어 나는 이것이 최선의 해결책이라고 제안하지 않았지만 나를 위해 치료를했습니다!