Всегда инициируйте уведомление, сопоставляя текущее время с массивом в целевых файлах.
Здравствуйте, ребята, я новичок в цели c, я пытаюсь вызвать уведомление, когда текущее время соответствует времени массива с именем newarr
я добавил раз в этом массиве. Я хочу, чтобы уведомления запускались автоматически в зависимости от времени, добавленного в массив. Теперь я сделал оператор if всякий раз, когда текущее время соответствует времени, указанному в массиве, когда запускается уведомление. но AP работает нормально, но срабатывает только одно уведомление. пожалуйста, помогите мне вызвать уведомление впоследствии.
Вот что я сделал до сих пор:
#import "ViewController.h"
@interface ViewController () {
NSUserDefaults *defaults;
NSString *todaysjustcurrentime;
NSMutableString *todayjusthoursplit;
NSMutableString *todayjustmintsplit;
NSInteger days;
}
@end
bool isGrantedNotificationAccess;
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
isGrantedNotificationAccess = false;
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert+UNAuthorizationOptionSound;
[center requestAuthorizationWithOptions:options completionHandler:^(BOOL granted, NSError * _Nullable error) {
isGrantedNotificationAccess = granted;
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (IBAction)notifyButton:(id)sender {
if (isGrantedNotificationAccess) {
NSLog(@"clicked");
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.title = @"Notify me";
content.body = @"Its change of moment in your area";
content.sound = [UNNotificationSound defaultSound];
NSArray *newarr = [[NSArray alloc] initWithObjects:@"18:39",@"18:40",@"18:38",nil];
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm"];
// or @"yyyy-MM-dd hh:mm:ss a" if you prefer the time with AM/PM
NSLog(@"here is new current date %@",[dateFormatter stringFromDate:[NSDate date]]);
NSDate* now = [NSDate date];
NSLog(@"here is now date new %@", now);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
NSDate *currentDate = [NSDate date];
NSString *dateString = [formatter stringFromDate:currentDate];
NSLog(@"here is the new new date %@", dateString);
NSArray *todayjusttimearray = [dateString componentsSeparatedByString:@":"];
NSLog(@"here is today new new hour split %@", todayjusttimearray);
todayjusthoursplit = todayjusttimearray[0];
todayjustmintsplit = todayjusttimearray[1];
NSLog(@"here is the today new new hour splited new try %@", todayjusthoursplit);
NSLog(@"here is the today today new new mint splited nee try %@", todayjustmintsplit);
NSDateComponents* date = [[NSDateComponents alloc] init];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"dd-MM-yyyy"];
NSDate *currentdatehere = [NSDate date];
NSString *cureentdatestr = [f stringFromDate:currentdatehere];
NSDate *startDate = [f dateFromString:cureentdatestr];
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:startDate];
days = [components day];
date.day = days; //getting current day of the month
date.hour = todayjusthoursplit.intValue;
date.minute = todayjustmintsplit.intValue + 1;
NSLog(@"here is setup date %@", date);
if ([newarr containsObject: dateString])
{
NSLog(@"here is the current time you know ");
}
else {
NSLog(@"here is the current time you dont know ");
}
NSLog(@"this is time right now %@", dateString);
if ([newarr containsObject: dateString])
{
NSLog(@"Yes its time to do something");
UNCalendarNotificationTrigger* trigger = [UNCalendarNotificationTrigger
triggerWithDateMatchingComponents:date repeats:YES];
UNNotificationRequest* request = [UNNotificationRequest
requestWithIdentifier:@"Notify me" content:content trigger:trigger];
[center addNotificationRequest:request withCompletionHandler:nil];
}
else {
NSLog(@"here is the current time does not match ");
}
}
}
@end
1 ответ
По вашей логике, я не уверен, что вы пытаетесь сделать, поэтому я не буду говорить об этом. Чтобы исправить предупреждение, просто немного измените свой код, как показано ниже, тогда вы получите правильную дату при печати:
if ([TodayTimeNoteArray containsObject: todaysjustcurrentime])
{
date.day = days; //getting current day of the month
date.hour = todayjusthoursplit.intValue;
date.minute = todayjustmintsplit.intValue;