2013-04-24 1 views
0

배열을 사용하여 UIPageViewController에 일부 viewController를 추가하고 있습니다. 문제는 당신이 더 슬쩍 할 때 그들이 기억에 남고 나는 그들을 삭제하고 싶다는 것이다. 나는이 대리자 메서드를 발견UIPageViewController에서 이전에 추가 한 viewController를 삭제합니다.

- (void)pageViewController:(UIPageViewController *)pvc didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed 
{ 
    // If the page did not turn 
    if (!completed) 
    { 
     return; 
    } 
    // This is where I want to delete the previousViewControllers to release memory 
} 

을하지만 어떻게 그 previousViewControllers를 삭제합니까? 다시 스크롤하면 다시로드해야하지만 그렇지 않으면 제거해야합니다. 그렇지 않으면 전체 시간 동안 메모리에 남아 있기 때문입니다.

+0

UIPageViewController는 최대 3 개의 컨트롤러 (현재, 이전, 다음)에 매달려 있어야하며 보유하고있는 컨트롤러를 절대로 삭제할 수 없습니다. 컨트롤러가 그보다 더 오래 걸린다면 아마 당신이 컨트롤러를 추가 한 배열에 컨트롤러를 참조하고 있기 때문일 것입니다. UIPageViewController에 그것들을 주면 UIPageViewController가 그것들에 강한 포인터를 유지하기 때문에 viewController에있는 모든 포인터를 아무 것도 설정하지 않아도된다. –

답변

-1

나는 UIPageViewController을 사용한 적이 없지만 previousViewControllers은 읽기 전용입니다. 이전 ViewController에 다시로드하라는 메시지를 보냅니다.

예를 들어,이 마지막의 ViewController가 표시 액세스 할 생각 :

MyVC *lastVC = (MyVC*)[previousViewControllers objectAtIndex:[previousViewControllers count]-1]; 
lastVC.reloadFlag = YES; // Assuming you have a reloadFlag property in your MyVC class 

그래서 당신은 당신이 당신의 질문에이 방법에서 그 넣을 수 있습니다. 그런 다음

확인 viewWillAppear을 당신이 당신의 ViewController로 돌아갈 때 MyVC * 객체라고하고 있는지, 그 안에 간단한 일을 넣어 :

if(_reloadFlag) { 
    //updateUI 
} 

이 그냥 생각, 당신은 할 수있다 작동하도록 몇 가지 물건을 변경하십시오.

+0

문제는 UIPageViewController에 추가 된 viewController가 다른 클래스에서 가져온 것입니다. 예를 들어 "MyVC"뿐만 아니라 MyVC2, MyVC3, MyVC4 등 ... – Shinonuma

+0

아마도 모든 VC 클래스를 속성으로 플래그를 가질 수있는 슈퍼 클래스? – rdurand

+0

또는 모든 클래스에 플래그를 추가하고 (너무 많지 않은 경우) * [lastVC isKindOfClass : @ "..."] *로 클래스를 확인하십시오. – rdurand

관련 문제