簡體   English   中英

如何從UILocalNotification注冊NSNotification?

[英]How to register for an NSNotification from a UILocalNotification?

我有一個tabbar應用程序,讓我們說我想切換到第二個選項卡並在12:00時彈出警報,即使我的應用程序沒有運行。

我得到了UILocalNotification的所有代碼正常工作,但后來我認為最好的方法是通過發布應用代表的通知:

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

    // Add the tab bar controller's view to the window and display.
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    // Handle launching from a notification when the app is NOT running
    UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotification) {
        [tabBarController setSelectedIndex:1];
        [[NSNotificationCenter defaultCenter] postNotificationName:@"AlertNotification" object:self];
    }
    return YES;
}

然后,在我的SecondViewController.m中,我有:

- (void)viewDidLoad {
  [super viewDidLoad];
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popUpAlert:) name:@"AlertNotification" object:nil];
}

但這不起作用。 我懷疑在沒有調用SecondViewController的viewDidLoad時發送通知,對吧? 有可能解決這個問題嗎? 在這種情況下,您是否同意我使用NSNotificationCenter方法?

提前致謝。

我很快就創建了一個測試項目,並得到了其通過將通知登記工作awakeFromNib (假設SecondViewController在廈門國際銀行文件創建)

- (void)awakeFromNib {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(popUpAlert:) name:@"AlertNotification" object:nil];
}
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
[[UIApplication shareApplication] registerUserNotificationSettings: settings];

我猜你是對的。 它不起作用,因為您在將視圖控制器添加為觀察者之前發布通知。

另一種方法是向應用程序委托添加bool屬性,以指示應用程序是否已從本地通知啟動。 可以使用[[UIApplication sharedApplication] delegate]從應用程序的任何位置請求應用程序[[UIApplication sharedApplication] delegate]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM