3

私は iOS と Cocoa プログラミングの初心者で、今日はローカル通知をテストするための小さな iOS アプリを作成したいと考えていました。通知は正常に機能し、すべてが期待どおりに機能しています。私の唯一の問題は、メソッドapplication:didReceivedLocalNotificationが呼び出されたくないということです:D

実装は次のように機能します。UI にはスライダーがあり、ユーザーは秒単位で時間値を定義できます。スライダーに値を設定した後、LocalNotification は xx 秒で起動されます。ホームボタンを押すと、通知は時間通りに死んでいるように見えます。ただし、アプリケーションがフォアグラウンドにある場合、通知は表示されません。メソッドを実装し、メソッドの先頭に を配置application:didReceivedLocalNotificationしてメソッドの呼び出しをテストしましたNSLog(@"YEEEAAH");が、端末に出力がありません。

セグエも効いているようです。SliderTouched: の最後に行を入れると、セグエが実行されます。

これが私のコードです:

- (IBAction)sliderTouched:(UISlider *)sender {
    float seconds = [sender value];
    self.secondLabel.text = [NSString stringWithFormat:@"%d sec.", (int)seconds];

    UIApplication *theApplication = [UIApplication sharedApplication];
    UILocalNotification * theNotification = [[UILocalNotification alloc] init];
    [theApplication cancelAllLocalNotifications];
    NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:(int)seconds];
    theNotification.fireDate = fireDate;
    theNotification.timeZone = [NSTimeZone defaultTimeZone];
    theNotification.alertBody = @"Lalalala";
    theNotification.soundName = UILocalNotificationDefaultSoundName;

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:fireDate];
    NSInteger hour = [components hour]%12;
    NSInteger minute = [components minute];
    NSInteger second = [components second];

    self.timeLabel.text = [NSString stringWithFormat:@"%02i:%02i:%02i", hour, minute, second];

    [theApplication scheduleLocalNotification:theNotification]; 
}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    if (application.applicationState == UIApplicationStateActive) {
        [self performSegueWithIdentifier:@"modalView" sender:nil];
    }
}
4

2 に答える 2

0

didReceiveRemoteNotificationハンドラーを didReceiveLocalNotification使用し、通知にタブを付けるか、アプリがフォアグラウンドにあるときに呼び出されます。

于 2015-08-11T10:20:01.913 に答える