2016-01-27 63 views
1

我正在通過本地通知爲應用程序實施提醒功能。 用戶將安裝時間以及重複間隔和應用程序將安排這樣相應的通知:iOS通知:未調用的回調

UILocalNotification *notification = ...; 
[[UIApplication sharedApplication] scheduleLocalNotification:notification]; 

對於這個工作我需要註冊我的通知類型如下:

UIUserNotificationSettings *notificationSettings; 

notificationSettings = [UIUserNotificationSettings 
         settingsForTypes:UIUserNotificationTypeAlert 
           categories:nil]; 

[[UIApplication sharedApplication] 
    registerUserNotificationSettings:notificationSettings]; 

雖然通知將被正確安排,所有AppDelegate回調(didRegisterUserNotificationSettings,didReceiveLocalNotification)都不會被調用。但是當應用處於前臺時,我需要對 通知做出反應。

註冊通知設置應觸發在AppDelegate的回調消息:

- (void)application:(UIApplication *)application 
     didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings 
{ 
    NSLog(@"Callback called."); 
} 

只是正常的快速測試項目(New Project - >單查看應用程序 - >添加註冊碼和回調 - >啓動)。回調被調用。

但是,在真正的應用程序它不起作用。

我完全剝離了我的應用程序AppDelegate(刪除自定義的init代碼,沒有ui加載),以便它只註冊通知設置。全新的應用安裝會正確觸發用戶確認對話框。但回調不會被調用。

我是否缺少構建設置/編譯器標誌?我不知道該應用指向該方向的任何特殊設置。我無法發現示例項目的任何不同之處。

Xcode 7.2,iPod5 iOS9.2.1

+0

控制檯中是否有任何東西? –

+0

@LouFranco沒有什麼。我甚至檢查了完整的設備日誌。 – lupz

+0

@lupz你試過另一種通知類型嗎?可能是'UIUserNotificationTypeBadge | UIUserNotificationTypeSound' – sage444

回答

1

Ouch。這是使一個完美的理由一捂臉......

爲了檢測整個應用程序中的某些UI事件中,AppDelegate中改爲exdend UIApplication,所以我可以用- (void)sendEvent:(UIEvent *)event回調。 AppDelegate通常應該延伸UIResponder

您可以設置不同的類在main.m兩種用法:

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
    @try { 
     // Original AppDelegate now extending UIResponder 
     NSString *mainDelegate = NSStringFromClass([AppDelegate class]); 
     // New class extending UIApplication 
     NSString *mainClass = NSStringFromClass([AppMain class]); 

     return UIApplicationMain(argc, argv, mainClass, mainDelegate); 
    } 
    @catch (NSException *exception) { 
     NSLog(@"%@", [exception reason]); 
    } 
    } 
} 

我感謝大家對他們的建議。 有時你必須退後一步。