当应用程序在后台运行时,获取iPhone通知以调用我的委托

时间:2011-07-08 14:03:02

标签: ios4 background uialertview uilocalnotification

我有一个我想继续运行的企业应用程序,因此它可以调用web服务并在需要他们做某事时告知用户。

所以,它现在在后台运行,它会调用,得到结果,但通知用户是我的问题。

当我关闭UILocalNotification时,警报不会调用UIAlertDelegate,我也看不到如何设置警报。

以下是我执行通知的代码,这实际上会显示警报,但我需要它然后调出View以便他们可以看到该表,但是{{1}它打开不是我的应用程序使用的两个之一。

View

另外,所以我试着提出一个警告,我可以设置代理,所以在我的控制器中,我调用上面的代码,我也称之为:

        UILocalNotification *localNotif = [[UILocalNotification alloc] init];
        if (localNotif) {
            localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"%@ has a message for you.", nil), @"FYR"];
            localNotif.alertAction = NSLocalizedString(@"Read Msg", nil);
            localNotif.soundName = nil;             
            localNotif.applicationIconBadgeNumber = -1;
            NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Your Background Task works", ItemListKey, @"Message from FYR", MessageTitleKey, nil];
            localNotif.userInfo = infoDict;
            [[UIApplication sharedApplication] presentLocalNotificationNow:localNotif];
            [localNotif release];
        }

然后选择此通知并最终调用此函数,这确实有效,但用户看不到警报,我希望因为它在后台。

        [[NSNotificationCenter defaultCenter]  
         postNotificationName:@"ShowAlert"
         object:nil
         userInfo:mydata];

在主代表中,我已经定义了这个,以及相应的函数:

- (void) _showAlert:(NSString*)pushmessage withTitle:(NSString*)title { NSLog(@"%@", @"Attemping to show alert"); UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title message:pushmessage delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes",nil]; [alertView show]; if (alertView) { [alertView release]; } }

我的想法是,如果我可以获得弹出的警报来调用此委托,那么它可以执行此代码:

@interface FYRViewAppDelegate : NSObject <UIApplicationDelegate, UIAlertViewDelegate> {

那么,有没有办法让- (void)alertView:(UIAlertView *)alertview clickedButtonAtIndex:(NSInteger)buttonIndex { alertview--; if (buttonIndex == 0) { } else { [self.window addSubview:[tableController view]]; } } 使用我的代表进行提醒?

或者,当应用程序在后台时,是否有办法显示警报?

或者,我是否需要编写两个应用程序,因此它们与远程通知进行通信,因此当应用程序在后台运行时会运行,然后通过远程通知启动主应用程序。我不喜欢这种方法,因为它似乎非常混乱,但可能会有效。

由于程序永远不会停止运行

UILocalNotification

仅在启动时调用,本地通知从不调用它,也永远不会调用它:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

1 个答案:

答案 0 :(得分:0)

我认为您在应用程序处于活动状态时不发布通知。你不能简单地在发布本地通知时设置一个标志,然后在应用程序变为活动状态时检查标志:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (localNotificationPosted) {
        // Do whatever you need to do.
    }
}

这可能是正确的行为,因为除非用户驳回通知,否则应用程序将变为活动状态。即使用户驳回通知,下次打开应用程序时显示新消息也许并不是件坏事。