2011-05-06 2 views
2

iPhone 앱이 백그라운드에서 실행 중일 때 ASIHTTPRequest을 사용하여 여러 파일을 다운로드하고 있습니다. 큐가 완료되면 UILocalNotification을 표시하려고합니다.ASINetworkQueue가 모든 요청을 완료했을 때 UILocalNotification을 표시하는 방법은 무엇입니까?

그래서
- (void)queueFinished:(ASINetworkQueue *)aQueue 
{ 

    NSLog(@"Queue finished"); 

    if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { 
     UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
     localNotification.alertBody = NSLocalizedString(@"All downloads completed");   
     [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; 
     [localNotification release]; 
    } 
} 

, 어떻게이 통지를 표시 할 수 있습니다 : 응용 프로그램이 재개 될 때까지 다음 대리자 메서드가 호출되지 않는 이유는 무엇입니까? 이전부터

답변

0

는 SO 질문 notification when program is in background iOS 4

앱이 일시 중단 된 상태에있을 때, 당신이 어떤 알림을받을 수 없습니다 것을 깨닫게 않습니다 -이 바로 문서입니다. 알림을 수신 할 수있는 응용 프로그램에는 iPod 및 아날로그와 같은 오디오 응용 프로그램, 위치 기반 응용 프로그램 및 VoIP 응용 프로그램 등 세 가지 클래스 만 있습니다. 앱이 해당 애플리케이션 중 하나 인 경우 plist를 올바르게 설정해야합니다.

+0

죄송합니다. 그러나이 답변은 너무 일반적이어서 내 특정 문제를 해결하지 못합니다. 지역 알림을 일반적으로 표시하는 방법을 알고 있습니다. 대리자 메서드가 백그라운드 상태에서 호출되지 않는 이유는 performSelectorOnMainThread와 함께 호출되기 때문입니다. – Felix

0

사용이 :

UILocalNotification *localNot = [[UILocalNotification alloc] init]; 
localNot.alertBody = @"Your Text"; 
localNot.alertAction = @"Name on the button"; 
localNot.fireDate = [NSDate date]; 
localNot.soundName = UILocalNotificationDefaultSoundName; 
[[UIApplication sharedApplication] scheduleLocalNotification:localNot]; 

무슨 일을하는지 :

  • 는에 표시되는 버튼의 이름을 추가하여 LN
  • 의 몸을 추가 LocalNotification
  • 만들기 "alert"
  • fireDate를 실제 날짜와 시간으로 설정하십시오 (어쩌면 실제 날짜를 1 이초 -이 사용 : dateByAddingTimeInterval:)
  • 당신은 또한 사용자 정의 사운드를 사용할 수 있습니다합니다 (soundName 설정 ...)
  • 일정/대리자가되지 않습니다 LN
+0

내 문제는 _how_ 로컬 알림을 표시하지 않습니다. 실제 문제는 백그라운드 상태에서 실행되는 동안'queueFinished'를 호출하는 방법입니다. – Felix

+0

"UILocalNotification을 표시하는 방법 ...?" 그것이 내가 당신의 질문에 게시 한 이유입니다. –

1

이유 만들기 앱이 백그라운드에서 일시 중지되어 전화가 걸릴 확률이 높습니다. 사용자가 응용 프로그램을 닫은 후에도 일종의 긴 네트워크 프로세스를 수행하는 경우 네트워크 작업을 시작할 때 -[UIApplication beginBackgroundTaskWithExpirationHandler:]을 사용하면 네트워크 작업을 마칠 때까지 응용 프로그램이 백그라운드에서 계속 실행됩니다. 그러나 아직 만료되어 완료하기에 충분한 시간을 보장받을 수는 없습니다.

+0

나는 [요청 setShouldContinueWhenAppEntersBackground : YES]'로 요청을 구성 할 때 _ASIHTTPRequest_가'beginBackgroundTaskWithExpirationHandler'를 호출한다는 것을 알고 있습니다. 백그라운드에서 파일을 다운로드해도 문제가 없지만 알림을 표시 할 수는 없습니다. – Felix

+0

ASIHTTPRequest의 해당 기능에 대해 알지 못했습니다. 이 경우 왜 작동하지 않는지 잘 모르겠습니다 ... –

0

대기열 maxConcurrentOperationCount가 1로 설정되어 있습니까?

setShouldContinueWhenAppEntersBackground : YES는 요청 단위로 설정되며 ASIHTTPRequest의 묶음은 대기열 안에 있으므로 한 번에 하나씩 만 실행될 수 있습니다. 즉, 대기열에있는 다른 항목은 응용 프로그램을 일시 중지해도 시작되지 않으므로 OS는 아직 해당 네트워크 요청을 유지하지 못합니다.

나는 해결책이 확실하지 않지만 이것이 내가보고있는 것에 대한 이유라고 생각합니다.

관련 문제