2011-10-31 4 views
0

저는 iOS 개발을 처음 사용하고 있으며 3 위치보기 응용 프로그램을 작성하고 있습니다. 첫 번째보기는 응용 프로그램의 기본보기이고 두 번째보기는 여러 위치가있는 테이블보기이며 세 번째보기는 사용자가 테이블보기에 새 위치를 편집하거나 추가 할 수있는 상세보기입니다.XCode ARC 동일한보기의 여러 인스턴스

첫 번째 및 세 번째보기에서 CLLocationManager를 사용하고 있지만 세부 뷰에 대해 가장 정확한 정확도가 필요한 반면 MainView에서 가장 정확한 정확도가 필요하지 않기 때문에 두 뷰의 모든 뷰에 자체 CLLocationManager 인스턴스가 있습니다. . 내 AppDelegate.m에서 나는 통지를 가지고, 응용 프로그램이 전경에 들어가면 화재 :

그래서 여기가 문제가 세 번째보기는 DetailViewController.m에서

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 

    [[NSNotificationCenter defaultCenter] postNotificationName: @"didEnterForeground" object: nil userInfo: nil]; 
} 

, 나는에 등록 이 통지에 대한의 viewDidLoad :

- (void) viewDidLoad { 

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(enteredBackground:) name: @"didEnterBackground" object: nil]; 
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(enteredForeground:) name: @"didEnterForeground" object: nil]; 
} 
DetailViewController.m의 enteredForeground 방법 그냥 다시 위치 관리자를 시작해야

합니다 (didEnterBackground 방법 그를 중지)

- (void) enteredForeground: (NSNotification*) notification { 
    [self.locationManager startUpdatingLocation]; 
} 

ARC와 함께 XCode 4.2를 사용하고 있습니다. 약 10 번 DetailView를 방문하면 배경 (예 : MainView)으로 이동 한 다음 전경으로 다시 들어가서 10 명의 LocationManagers가 즉시 시작됩니다 (이것은 NSLog에서 말하는 것입니다). DetailView (및 다른 뷰의 경우)에는 이러한 뷰의 방문수와 같은 인스턴스 수가 존재하는 것으로 보입니다.

아마도 NSNotification 때문에 사라진 경우보기가 제대로 해제되지 않을 수 있습니다.

누군가가이 문제에 대해 도움을 주시면 감사하겠습니다. 많은 수의 LocationManagers가 배터리를 꽤 많이 사용하게 될 것입니다.

미리 감사드립니다.

답변

0

배경으로 이동할 때 stopUpdatingLocation해야한다고 생각합니다. 그렇지 않으면 여러 인스턴스가 생성됩니다.

+0

예, 이미 처리했습니다. didEnterBackground 메서드는 stopUpdatingLocation을 호출합니다. – android