Ios4 获取iPhone通知,以便在应用程序在后台运行时调用我的代理

Ios4 获取iPhone通知,以便在应用程序在后台运行时调用我的代理,ios4,background,uialertview,uilocalnotification,Ios4,Background,Uialertview,Uilocalnotification,我有一个我想继续运行的企业应用程序,因此它可以调用Web服务,并在用户需要执行某些操作时通知用户 因此,它现在在后台运行,它进行调用,获取结果,但通知用户是我的问题 当我触发UILocalNotification时,该警报不会调用我的UIAlertDelegate,我不知道如何设置该警报来实现这一点 下面是我如何执行通知的代码,这实际上会引发一个警报,但我需要它来引发一个视图,以便他们可以看到表,但它打开的视图不是我的应用程序使用的两个视图之一 UILocalNotificati

我有一个我想继续运行的企业应用程序,因此它可以调用Web服务,并在用户需要执行某些操作时通知用户

因此,它现在在后台运行,它进行调用,获取结果,但通知用户是我的问题

当我触发UILocalNotification时,该警报不会调用我的UIAlertDelegate,我不知道如何设置该警报来实现这一点

下面是我如何执行通知的代码,这实际上会引发一个警报,但我需要它来引发一个视图,以便他们可以看到表,但它打开的视图不是我的应用程序使用的两个视图之一

        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];
    }
}
在main delegate中,我已定义了此功能和相应的功能:

@接口FYRViewAppDelegate:NSObject{

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

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

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

或者,我是否需要编写两个应用程序,以便它们与远程通知通信,这样当应用程序在后台运行时,一个应用程序会运行,然后使用远程通知启动主应用程序。我不喜欢这种方法,因为它看起来非常混乱,但可能会起作用

因为程序从不停止运行

-BOOLapplication:UIApplication*应用程序didFinishLaunchingWithOptions:NSDictionary*launchOptions{

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

-作废申请:UIApplication*申请
didReceiveLocalNotification:UILocalNotification*localNotification{.

我想当应用程序处于活动状态时,您不会发布通知。您不能在发布本地通知时设置一个标志,然后在应用程序处于活动状态时检查该标志:

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

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

当应用程序位于前台时,我只更新表。理想情况下,我希望他们这样做除非出现需要他们注意的事情,否则不要考虑应用程序,因此,对于一些人来说,需要他们注意的事情可能需要几周的时间,而对于其他人来说,可能只需要几分钟。要求用户打开应用程序以查看需要他们注意的事情会使程序失去便利,但是,您的sol在iPhone上,避免可能是最好的方法。另一个问题是,应用程序不会真正进入睡眠状态,它会保持活动状态,因此我不知道它是否会调用ApplicationIDBecomeActive,我不确定如何解决这个问题。另一个解决方案是在不活动时进入睡眠状态,然后当他们打开它时,将Web服务称为and在那一点上进行了更新,但是,同样,这似乎是一个糟糕的设计。