0

저는 UITabBarController 내부의 UINavigationController 내부에서 UITableView를 사용하는 앱을 만들었습니다. UITableView의 모든 항목은 몇 가지 기본 텍스트, 버튼을 포함하는보기를 열지 만 가장 중요한 것은 시작될 때 오디오를 재생하는 MPMoviePlayerController입니다. 사용자는이 MPMoviePlayerController를 클릭하고 나머지 탭 (다른 탭, 또는 navcontroller로 되돌아 가면서 테이블 뷰에서 다른 뷰를 여는 것) 주위를 계속 탐색하고 오디오를 계속들을 수 있습니다.iOS SDK에서보기가 언로드되지 않도록 하시겠습니까?

사용자가 언제든지 활성 MPMoviePlayerController를 사용하여보기로 돌아갈 수 있기를 바랍니다. 사용자가보기에서 특정보기로 돌아갈 수 있도록하는 방법에 대해 이해하지만 사용자가 동일한보기에 액세스하려고하면 해당보기가 다시로드되지 않도록하는 방법에 어려움을 겪고 있습니다.

보기를 메모리에 저장할 수있는 방법이 있습니까? 또는 액티브 MPMoviePlayerController를 어떤 유형의 전역 개체로 저장하여 적어도 어디서나 액세스 할 수 있습니까?

모든 도움에 감사드립니다. 감사!

답변

0

그대로 유지하면됩니다. 이 [myView retain]처럼 필요에 따라 포인터를 유지하십시오. myView를 나타나게하려면, 서브 뷰로 추가하십시오 (예 : [myController.view addSubview:myView]).

희망은 도움이 될 것입니다. 행운을 빈다.

2

[UIApplication sharedApplication] .delegate를 사용하여 코드의 어느 곳에서나 액세스 할 수 있지만 UIApplicationDelegate 하위 클래스로 캐스팅해야하는 MPMoviePlayerController 속성을 앱의 UIApplicationDelegate에 생성하는 것이 좋습니다.

콘텐츠를 재생하는 화면에 진입 할 때 앱 위임자의 동영상 플레이어 속성이 nil인지 확인합니다 (생성 한 경우). 그렇지 않으면 다시 사용하십시오.

미디어 재생이 중지되거나 미디어가 이미 중지되어 메모리 경고 또는 응용 프로그램이 종료되었을 때 MPMoviePlayerController에 대한 참조를 해제해야합니다.

이 접근법의 단점은 대부분의보기 컨트롤러와 앱 대리인이 연결된다는 것입니다. 그러나 프로토콜을 사용하여이를 완화 할 수 있습니다.

0

보유를 추가하더라도 트릭을 수행하지 않는다는 사실을 발견했습니다. 실제로 setView 재정의 (뷰를 언로드 할 때 setView : nil을 호출해야하기 때문에 가장 좋은 성공을 찾았습니다 .VCF가 처음로드 될 때 BOOL이 설정되고 일단 setView가 호출되면 setView가 호출되지 않습니다. 다시

- (void) setView: (UIView*) view{ 
    NSLog(@"MainViewController: setView"); 

    // this is our attempt to stop iOS from unloading our view.. when iOS tries to unload your view they call setView:nil.. so, no! 
    if(!viewDidAppear) [super setView:view]; 
}  
0

해킹의 조금하지만 nil에보기 설정할 수 있습니다하지 않도록 당신은 당신의 하위 클래스에서 setView:를 오버라이드 (override) 할 수 있습니다.

-(void)setView:(UIView *)view 
{ 
    if (view == nil) return; 

    [super setView:view]; 
} 
관련 문제