2012-02-14 3 views
0

나는 거의 내 아이폰 애플 리케이션을 완료했습니다 그리고 나는 XCode 4 및 IOS 시뮬레이터를 사용하여 테스트를하고 있어요. 내 응용 프로그램은보기 일련의 모달 열이 있습니다IOS - 모달 UIView 메모리 경고 후 대리자를 잃어버린입니다

보기 1 -> 모달 ->보기 2 -> 모달 ->보기 3 -> 모달 ->보기 4

보기 2는보기 3의 대리인이고보기 3은보기 4의 위임입니다.

View4가 표시되고 "메모리 경고 시뮬레이션"을 시도하면 View3으로 돌아갈 수 있지만 View3은 대리인 ([self.delegate NotifySave:self])을 호출 할 수 없습니다.

대리자를 호출하기 전에 중단 점을 배치하면 "0xsomething"대신 "0x0"이 표시됩니다. "집"버튼을 사용하여 응용 프로그램을 "종료"해도 응용 프로그램을 다시 실행할 때 문제가 계속 발생합니다.

질문은 다음과 같습니다

  • 다른 사람이 같은 문제가 발생 했습니까?
  • 이 문제는 시뮬레이터에서만 존재할 수 있습니까? (실제 iPhone에서 경고를 재현 할 수 없음)
  • 누군가 제안을 했습니까?
  • View2가 출시되지 않도록 할 수 있습니까? (이것이 문제의 원인이라고 생각합니다.)

도움을 주신 모든 분들께 감사드립니다.

답변

2

obj-c 2.0 속성을 통해 대리인을 저장하는 경우 assign 대신 retain에 의존하도록 모델을 변경해보십시오. 이렇게하면 위와 같은 상황에서 대리인이 귀하의 아래에서 석방되지 않습니다. 이 경로를 따라 가면 두 개의 객체가 서로 유지되고 해제되지 않는 "원 유지"가 없는지 확인하는 것이 중요합니다.

@property (nonatomic, retain) id delegate; 

은 배경 처리를 들어, (- (void)applicationDidEnterBackground:(UIApplication *)application에) 종료에 메모리 부족 다음, 분명이 모든 항목을 당신이 당신의 응용 프로그램 상태를 복원하는 데 필요한 정보를 저장하는 시스템을 개발해야하며, 재발에 복원. 이렇게하면 응용 프로그램이 자주 "제거"되지 않으므로 매번 다시 제곱 1에서 앱을 다시 시작하는 대신 다시 실행시 복원 할 수있는 가능성이 높아집니다 (- (void)applicationWillEnterForeground:(UIApplication *)application).

+0

ARC를 사용하는 경우 강함을 사용해야합니다. –

+0

제안 해 주셔서 감사합니다. 사실 문제는 내 "didUnLoad"가 포인터를 nil로 설정하여 발생했습니다. 나는 그것을 주석 처리했고 포인터를 단순히 사용 후 nil로 설정했다. – Daniele

+0

나는 (UISplitViewController를 제외하고) 같은 문제를 겪고있었습니다. 고맙습니다! – DOOManiac