0

私はローカル通知を扱っています。通知が機能するようになりました。しかし、正しい日付を設定するのに苦労しています。

まず状況をスケッチします。お祭りアプリを作っています。このフェスティバルは 6 月 28-29-30 日に開催されます。すべてのアーティスト オブジェクトには art_day があります。これは 1 ~ 2 または 3 です。

 1 --> 28 JUNE
 2 --> 29 JUNE
 3 --> 30 JUNE

アーティストの開始時刻の 15 分前にローカル通知が必要です。これが、通知のfireDateを作成する方法です。

-(NSDate *)getDateForArtist:(Artists *)artist{
    int day = [artist.art_day intValue];
    int timeStart = [artist.art_timestart intValue];
    NSString *timeStart2 = [self getTimeStamp:artist.art_timestart];
    int hours = [[timeStart2 substringWithRange:NSMakeRange(0,2)]intValue];
    int minutes = [[timeStart2 substringWithRange:NSMakeRange(2,2)]intValue];
//in my db timeStart looks like 1530 --> 15h30 (I know bad db structure!!!)
    int day2;

    if(day == 1){
        NSLog(@"day is 28");
        day2 = 28;
    }else if (day == 2){
        NSLog(@"day is 29");
        day2 = 29;
    }else{
        NSLog(@"day is 30");
        day2 = 30;
    }
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
    [comps setTimeZone:timeZone];
    [comps setDay:day2];
    [comps setMonth:06];
    [comps setYear:2013];
    [comps setHour:hours];
    [comps setMinute:minutes];
    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *date = [gregorian dateFromComponents:comps];
    NSLog(@"date is %@",date);


    NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
    [offsetComponents setMinute:-15];
    NSDate *date2 = [gregorian dateByAddingComponents:offsetComponents toDate:date options:0];
    NSLog(@"date -15 min %@", date2);
    return date2;
}

これが私の通知の作成方法です

   UIApplication* app = [UIApplication sharedApplication];
        UILocalNotification* notifyAlarm = [[UILocalNotification alloc]
                                            init];
        if (notifyAlarm)
        {
            NSDate *datePush = [self getDateForArtist:artist];
        NSLog(@"artist plays on: %@ on hour %@",artist.art_day,artist.art_timestart);
        NSLog(@"Push notification should send on: %@",datePush);
            notifyAlarm.fireDate = datePush;
            NSDictionary *dicNotification = [[NSDictionary alloc]initWithObjectsAndKeys:artist.art_id,@"pushKey", nil];
            notifyAlarm.userInfo = dicNotification;
            notifyAlarm.timeZone = [NSTimeZone defaultTimeZone];
            notifyAlarm.repeatInterval = 0;
            notifyAlarm.soundName = @"Glass.aiff";
            notifyAlarm.alertBody = [NSString stringWithFormat:@"%@ starts in 15 minutes",artist.art_name];
            [app scheduleLocalNotification:notifyAlarm];
            NSLog(@"Added");
        }

しかし、なぜかプッシュ通知が来ません。または、日付が正しくないと思います。

これは私がログから得たものです

2013-06-29 15:37:17.801 genkonstage[14120:907] artist plays on day: 2 on hour 2020
2013-06-29 15:37:17.803 genkonstage[14120:907] Push notification should send on: 2013-06-29 20:05:00 +0000

誰でもこれで私を助けることができますか?

4

0 に答える 0