2011-07-08 31 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服務並在那個時候更新,但是,再次,這似乎是一個糟糕的設計。 –

相關問題