当iPhone应用程序在后台运行时,我正在使用ASIHTTPRequest下载多个文件。我想在队列结束时提出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 :(得分:1)
您的代表未被调用的原因很可能是因为您的应用已在后台暂停。如果您在用户关闭应用程序后继续进行某种冗长的网络过程,则可以在启动网络任务时使用-[UIApplication beginBackgroundTaskWithExpirationHandler:]
,以便应用程序继续在后台运行,直到您完成网络任务。但是,它仍然会过期,所以你不能保证有足够的时间来完成。
答案 1 :(得分:0)
从之前的问题notification when program is in background iOS 4
开始您确实意识到当您的应用处于暂停状态时,您将不会收到任何通知 - 这在文档中是正确的。只有3类应用程序可以接收通知:音频应用程序(如iPod和类似物),基于位置的应用程序和voip应用程序。如果您的应用程序是其中一个应用程序,则必须正确设置plist。
答案 2 :(得分: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];
你在做什么:
dateByAddingTimeInterval:
)答案 3 :(得分:0)
您的队列maxConcurrentOperationCount是否设置为1?
方法setShouldContinueWhenAppEntersBackground:YES是基于每个请求设置的,并且由于队列中有一堆ASIHTTPRequest,因此一次只能执行其中一个ASIHTTPRequest。这意味着当您暂停应用程序时,队列中的其他项目甚至还没有启动,因此操作系统还不知道该网络请求是否仍然存在。
我不确定是否有解决方案,但我认为这就是你所看到的原因。