ASINetworkQueue完成所有请求后如何显示UILocalNotification?

时间:2011-05-06 12:35:58

标签: iphone ios queue asihttprequest uilocalnotification

当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];
    }
}

那么,我该如何显示此通知?

4 个答案:

答案 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];

你在做什么:

  • 创建LocalNotification
  • 添加LN的正文
  • 添加“alert”
  • 上显示的按钮名称
  • 将fireDate设置为实际日期和时间(可能需要将实际日期设置为1或2秒 - 此用途:dateByAddingTimeInterval:
  • 设置soundName(您也可以使用自定义声音......)
  • 安排/创建LN

答案 3 :(得分:0)

您的队列maxConcurrentOperationCount是否设置为1?

方法setShouldContinueWhenAppEntersBackground:YES是基于每个请求设置的,并且由于队列中有一堆ASIHTTPRequest,因此一次只能执行其中一个ASIHTTPRequest。这意味着当您暂停应用程序时,队列中的其他项目甚至还没有启动,因此操作系统还不知道该网络请求是否仍然存在。

我不确定是否有解决方案,但我认为这就是你所看到的原因。