0

ARC를 사용하고 iOS7 (iPhone 5S)에서 테스트 중입니다.메시지가 백그라운드로 갈 때 할당 해제 된 인스턴스로 보냄

푸시 된 UIViewController (b)가있는 내비게이션 컨트롤러 (a)가 있습니다. b는 수동 segue를 통해 모달 NavigationViewController (c)를 제공합니다. c는 UIViewController (d)를 푸시합니다.

이제 우리에게는 루트와 모달이 각각 2 개의 탐색 스택이 있습니다.

배경으로 갈 때마다 모달 NavigationViewController (c)와 그 모든 자식을 닫습니다.

의 UIViewController에서

(B) 나는 다음과 같은 코드가 있습니다

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(enteredBackground:) 
              name:UIApplicationDidEnterBackgroundNotification object:nil]; 

} 
-(void)enteredBackground:(NSNotification *)notification{ 
    if (self.presentedViewController) { 
     [self dismissViewControllerAnimated:NO completion:nil]; 
    } 
} 
- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

나는 배경에 갈 때 나는 C의 rootViewController에 나는 경우는 잘 작동하지만 충돌 내가

2013-10-20 22:49:49.008 MyApp[2596:60b] *** -[UIView release]: message sent to deallocated instance 0x17036aa40 D.

오전 때를

어떻게 수정합니까? 모달 탐색 스택의보기가 dealloc으로 전송되고 이미 릴리스 된 것처럼 보입니다. 디버거를 살펴본 후에 모달 nvaigationcontroller (c) 자체가 여전히 존재하는 것 같습니다.

+0

해고 할보기 컨트롤러의 일부 유지/해제 코드에 문제가 있어야합니다. 해지 된 컨트롤러 주변에 더 많은 코드를 제공하십시오. –

+0

보유/해제 코드가 없습니다. 나는 호를 사용하고있다. 나는 또한 이러한 객체들에 대해 명시 적으로 약하거나 강한 속성을 선언하지 않는다. –

+0

ARC는 retain/releases가 없음을 의미하지는 않습니다. 여전히 고정 또는 할당을 정의해야합니다 (유지 또는 할당으로 변환 됨). 유지 보수/릴리스의 기본 사항을 잊지 않고 MRC를 사용하고 수동으로 관리하는 방법을 알고 나면 ARC로 이동하여 기본 실수를하지 않아야합니다. –

답변

0

나는 테스트 샘플을 만들고 동일한 시나리오를 확인 했으므로 어느 곳에서나 충돌하지 않습니다. ViewController C 및 D에서 UIView 유형의 객체에 대한 릴리즈가 있는지 확인하십시오. 위에서 언급 한 모든 작업을 수행하는 코드를 게시 할 수 있습니다.

+0

게시 할 수는 있지만 명시 적 출시 또는 보유는 없습니다. 아크를 사용하고 있습니다. 내 컴퓨터로 돌아 가면 코드를 게시합니다. 감사. –