私はローカル通知を扱っています。通知が機能するようになりました。しかし、正しい日付を設定するのに苦労しています。
まず状況をスケッチします。お祭りアプリを作っています。このフェスティバルは 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
誰でもこれで私を助けることができますか?