2012-04-01 4 views
1

위치 처리가 내 앱에서 새롭게 구현되어 전경과 배경에서 만족스러운 결과를 테스트합니다. 이 응용 프로그램은 여러 지역뿐만 아니라 중요한 위치 변화를 모니터링합니다. 앱이 일시 중지되거나 종료 될 때도 동일한 결과를 얻을지 아직 알지 못했습니다. 이 상태에서 앱이 깨어 났을 때 launchOptions Dictionary 키를 제외하고 방금 시작한 앱은 launchOptions Dictionary 매개 변수에서 찾을 수 있습니다. 내 질문은, 응용 프로그램 대리인이 정상적으로 진행하도록 허용하고 모두 정상이라고 가정 할 수 있습니까? 모든보기 설정 코드를 가로채는 것이 필요합니까? 내 didFinishLaunchingWithOptions에서doneFinishLaunchingWithOptions 최소화 launchOptionsLocation 키 검색을 처리 하시겠습니까?

맨 처음 라인 : launchOptions 방법은 다음과 같습니다 십중팔구

NSManagedObjectContext *context = [self managedObjectContext]; 
if (!context) { 
    //Handle Error 
} 

self.sharedLocationHandler = [[[TTLocationHandler alloc] init] autorelease]; 
self.siteLogger = [[[ProjectSiteLogger alloc] initWithOptions:nil] autorelease]; 
self.siteLogger.locationHandler = self.sharedLocationHandler; 
self.siteLogger.managedObjectContext = context; 

이 나는 ​​위치의 이벤트에 응답하기 위해 필요한 모든 것을 포함한다. launchOptions에서 위치 키를 쉽게 테스트 할 수 있으며, 예상치 못한 합병증이 수반 될지 모르기는하지만이 메서드의 나머지 부분은 건너 뛸 수 있습니다. 또한 사용자가보기를 설정하지 않은 불완전한 상태에있는 동안 의도적으로 앱을 시작한 경우 어떤 결과가 발생할지 질문합니다.

시도한 것입니까? 전혀 필요하지 않습니까? 응용 프로그램이 일시 중단되었을 때 Xcode 디버거에 연결된 상태를 유지할 수있는 방법을 모르기 때문에 이것을 테스트하는 방법을 알지 못합니다.

--- 추가 업데이트 정보 ---- 주위 테스트 전화를 들고 하루에

초기 테스트, 내 위치 처리 내가 AppDelegate에 아무런 변화에 원한 모든 작업을 수행 할 것 같았다. 그래서 나는 일시 중지/용어에서 깨어나서 볼 컨트롤러가 보이지는 않았지만 전체 appDelegate 프로 시저를 실행했다고 가정합니다. 시작 절차를 변경하지 않아도되는 것처럼 보이지만 appDelegate 절차를 줄이고 처리를 최소화하는 것이 현명한 성능이나 배터리 문제 일 수 있습니까?

답변

1

테스트 및 미세 조정의 좋은 조금 후에 내가 찾을 :

  1. 응용 프로그램은 비활성 또는 전혀 문제 라에서 깨울 것입니다.
  2. 내 위치 메서드가 실행되었고 App Delegate의 변경 사항과 관계없이 완료되었습니다.
  3. 응용 프로그램 대리인 프로세스를 줄이면 간헐적 인 시작 문제가 예상대로 발생했습니다.

명백한 성능상의 이점은 없었지만 응용 프로그램이 포 그라운드에서 제공되지 않으면 실행되지 않도록 미리보기 설정 코드를 분리하고 플래그를 추가했습니다. 필요한 것보다 더 이상 처리를하지 않는 것이 옳은 것 같습니다. 내가 함께 결국 코드는 다음과 같습니다

-(void)setupTabbarsWithViews 
{ 
    // Code to setup initial views here 

    // ending with flag toggle to prevent repeat processing 
    needsViewsSetup = NO; 
} 

를 입력합니다 응용 프로그램에서

전경 :

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
     if (needsViewsSetup) { 
      [self setupTabbarWithViews]; 
     } 
} 

참고 : 내 응용 프로그램이 아닌

// Initialize a flag 
BOOL needsViewsSetup = YES; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
    // All my response to location events are handled in the these two classes 
    self.sharedLocationHandler = [[[TTLocationHandler alloc] init] autorelease]; 
    self.siteLogger = [[[ProjectSiteLogger alloc] initWithOptions:nil] autorelease]; 
    self.siteLogger.locationHandler = self.sharedLocationHandler; 
    self.siteLogger.managedObjectContext = self.managedObjectContext; 

    // check launchOptions, skip all the views if there we were woken by location event 
    if (![launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) { 
     [self confirmDataExistsAtStartup]; 
     [self setupTabbarWithViews]; 
    } 

    return YES; 
} 

는 그런 다음 뷰 설정을 중요한 위치 변경 및 지리 정보를 수신하는 백그라운드에서 위치 서비스를 실행합니다.