2011-07-08 29 views
1

我有我想保持运行的企业应用程序运行,所以它可以调用web服务,并告知用户当有他们需要做的事情。获得iPhone的通知叫我委托当应用程序在后台

所以,它现在在后台运行,它使电话,得到的结果,而是告知用户是我的问题。

当我开火UILocalNotification时,警报不会调用我的UIAlertDelegate,我不明白如何设置该警报来完成此操作。

这是我如何做通知的代码,这实际上会提示一个警报,但我需要它然后调出View以便他们可以看到表格,但打开的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 {

只叫在启动时,本地通知永远不会调用它,这也不会被调用:

- (void) application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification *)localNotification {

回答

0

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

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

这很可能是正确的行为,因为应用程序将被激活,除非用户关闭通知。即使用户关闭通知,下次打开应用时显示新消息可能也不是什么坏事。

+0

当应用程序在前台时,我只是更新表。理想情况下,我希望他们不要考虑应用程序,除非出现需要他们注意的事情,所以,在任何需要他们关注的事情之前可能需要几周时间(对于某些人),而对于其他人而言,这可能只是几分钟。要求用户打开应用程序以查看他们需要注意什么会带走程序的便利性,但是,您的解决方案可能是iPhone上的最佳方法。 –

+0

另一个问题是,应用程序并没有真正进入睡眠状态,它仍然处于活动状态,所以我不知道它是否会调用“applicationDidBecomeActive”,但我不确定如何解决该问题。另一种解决方案是在不活动时进入睡眠状态,然后当他们打开它时,调用web服务并在那个时候更新,但是,再次,这似乎是一个糟糕的设计。 –

相关问题