나는 내 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
}
사용 게으른 로딩 스타일 코드 :
고마워요, 그 말이 맞는 데요, 어떻게 내 배열이 다시 초기화되었는지 아닌지 알 수 있습니까? 나는 if (myArray)와 if (myArray = nil) 그리고 if ([myArray count] == 0)를 시도했지만 배열이 해제 된 후 다시 정의 된 후에는 아무 것도 작동하지 않는 것 같습니다. 범위가 전체 클래스라고 가정하기 때문에 배열이 @interface에 정의 된 다음 viewDidAppar에서 초기화되고 viewWillDissAppear에서 해제됩니다. 이제이 오리 엔테이션 변경의 경우, 그것이 공개되었는지 여부를 알 수있는 방법을 찾아야합니다. 전역 부울은 작동하지만 아주 우아하지는 않습니다. – Jackson
알았어. 알았어. 내가 해제하고 다음 데이터 배열을 nil로 설정해야합니다, 그래서 나중에 그것이 nil과 같은지 검사 할 수 있습니다. 그렇지 않으면 다시 초기화 할 수 있습니까? – Jackson