0

나는 내 IOS 응용 프로그램에서 발생한 충돌을 추적했으며 viewWillAppear 전에 willAnimateRotationToInterfaceOrientation이 호출 됨과 관련이 있습니다.willAnimateRotationToInterfaceOrientation가 호출되기 전에 viewWillAppear

두 개의보기가있는 앱이 있습니다. 기본적으로 view1이 사라지면 viewWillAppear에 다시 나타날 때 다시 초기화된다고 가정하고 일부 배열을 릴리스합니다.

그러나 view2에서 방향을 변경 한 다음 다시 view1로 전환하면 view1이 calledviewWillAppear를 호출하고 모든 것을 다시 초기화하기 전에 willAnimateRotationToInterfaceOrientation이 발생하고 이로 인해 충돌이 발생합니다.

보기가 나타나고 모든 것이 다시 초기화 될 때까지 willAnimateRotationToInterfaceOrientation을 지연시키는 방법이 있습니까?

그렇지 않으면 내가 볼 수있는 유일한 해결책은 willAnimateRotationToInterfaceOrientation (보기가 엉망인 방향 변경을 초래 함) 또는 view1에서 view2로 전환 할 때 내 데이터를 공개하지 않아서 필요한 것보다 많은 메모리가 사용되는 것입니다.

아무도 내가해야 할 일에 대해 생각하지 못합니까? 당신이 순서를 호출 마음 이벤트를 필요가 없습니다

NSArray* someData; 


-(void)somefun1{ 

    if (!someData) { 

     [self loadData]; 
    } 

    //use your data 
} 

-(void)somefun2{ 

    if (!someData) { 

    [self loadData]; 
    } 

    //use your data 

} 

-(void)loadData{ 
    //some loading code 
} 

사용 게으른 로딩 스타일 코드 :

답변

1

당신은 게으른 로딩 스타일의 코드처럼, 당신의 문제를 방지 할 수 있습니다.

+0

고마워요, 그 말이 맞는 데요, 어떻게 내 배열이 다시 초기화되었는지 아닌지 알 수 있습니까? 나는 if (myArray)와 if (myArray = nil) 그리고 if ([myArray count] == ​​0)를 시도했지만 배열이 해제 된 후 다시 정의 된 후에는 아무 것도 작동하지 않는 것 같습니다. 범위가 전체 클래스라고 가정하기 때문에 배열이 @interface에 정의 된 다음 viewDidAppar에서 초기화되고 viewWillDissAppear에서 해제됩니다. 이제이 오리 엔테이션 변경의 경우, 그것이 공개되었는지 여부를 알 수있는 방법을 찾아야합니다. 전역 부울은 작동하지만 아주 우아하지는 않습니다. – Jackson

+0

알았어. 알았어. 내가 해제하고 다음 데이터 배열을 nil로 설정해야합니다, 그래서 나중에 그것이 nil과 같은지 검사 할 수 있습니다. 그렇지 않으면 다시 초기화 할 수 있습니까? – Jackson

관련 문제