请使用代码解释! 可能会提出这个问题 Manage Multiple UILocal Notification 但是没有得到答案呢? 请关注这个问题和anser 如何管理超过64的通知?
我有所有UINotification
时间的本地数据库,如下面的问题:
Set multiple UILocalNotification
请回答。
答案 0 :(得分:4)
在任何给定时间都无法安排超过64个本地通知。但是,可能有办法有效地实现您的目标。
UILocalNotification
对象上的repeatInterval
。此属性需要NSCalendarUnit
,可用于将重复设置为每小时,每天,每月等。UILocalNotification
个对象。丢弃任何不再有效的内容,并尽可能多地排队。UILocalNotification
个对象,因此在显示通知时您的用户将不会被带到应用程序。因此,除此之外,您可以使用calendar events and reminders为用户设置提醒。您可能希望使用EventKit框架来处理所有繁重的工作。这种方法的优点是您可以根据需要安排任意数量的事件。您可以使用日历作为通知存储来为您发送通知。因此,每次启动应用程序时,您都会使用其中一种谓词方法(如EKEventStore
)查询- (NSArray *)eventsMatchingPredicate:(NSPredicate *)predicate
,以查找您创建的事件。答案 1 :(得分:1)
也许有其他方法可以管理UILocalNotification
。
根据苹果,您可以设置最多64个通知。所以要管理超过64个通知,你可以在逻辑下面实现。
首先注册前64个本地通知。在每个应用启动或didBecomeActive获取剩余通知或使用[[UIApplication sharedApplication]scheduledLocalNotifications]
计数。所以,如果您的计数<64,那么请说出它的30.所以添加新的 34 通知,现在您的总通知将是64.每次启动都要这样做,以便它可以根据您的需要工作。
也许这会对你有帮助。
答案 2 :(得分:1)
尝试此操作,您可以选择setDay
,setMonth
,....来更改实际情况:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:3];
NSDate *date3Days = [calendar dateByAddingComponents:components
toDate:[NSDate date]
options:0];
UIApplication* app = [UIApplication sharedApplication];
NSArray* oldNotifications = [app scheduledLocalNotifications];
if ( oldNotifications ) {
[app cancelAllLocalNotifications];
app.applicationIconBadgeNumber = 0;
}
UILocalNotification* notifyAlarm = [[UILocalNotification alloc] init];
if (notifyAlarm) {
notifyAlarm.fireDate = date3Days;
notifyAlarm.timeZone = [NSTimeZone defaultTimeZone];
notifyAlarm.alertBody = NSLocalizedString( @"Push message", @"");
notifyAlarm.soundName = @"sound.wav";
[app scheduleLocalNotification:notifyAlarm];
}
如果您想设置一个特定时间,之后UILocalNotifications
应该出现,您可以创建上述解决方案的方法并循环显示您希望显示通知的日期:
NSArray *arrayNumbers = @[@5, @7, @14, @21, @30, @60, @90, @120];
NSDictionary *dictNotifications =
[[NSUserDefaults standardUserDefaults] objectForKey:kUserDefAppStarts];
for ( NSNumber *bla in arrayNumbers ){
NSString *strKey = [NSString stringWithFormat:@"%@%@", kUserDefAppStarts, bla];
NSDictionary *dict = dictNotifications[strKey];
NSString *strMessageQuestion = dict[kKeyMessage];
[self createNotificationWithNumberOfDays:[bla integerValue]
andMessage:strMessageQuestion
userInfo:dict];
}
这是你必须调用的方法
+ (void)createNotificationWithNumberOfDays:(int)days
andMessage:(NSString *)message
userInfo:(NSDictionary *)dict{
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:days];
NSDate *dateAlert = [gregorian dateByAddingComponents:components toDate:[NSDate date] options:0];
UIApplication *app = [UIApplication sharedApplication];
UILocalNotification *notifyAlarm = [[UILocalNotification alloc] init];
if( notifyAlarm ){
[notifyAlarm setFireDate:dateAlert];
[notifyAlarm setTimeZone:[NSTimeZone defaultTimeZone]];
[notifyAlarm setSoundName:@"soundname"];
[notifyAlarm setAlertBody:message];
[notifyAlarm setUserInfo:dict];
[app scheduleLocalNotification:notifyAlarm];
}
}
答案 3 :(得分:1)
从iOS7开始您也可以使用后台应用刷新来安排本地通知。在每次刷新调用时,您都可以检查数据库中是否有最近(未来)的通知,并按照您在应用中的方式安排它们。我们一直在我们的应用程序中使用这种方法,Apple似乎没有问题。另请注意,该用户可以禁用它,因此您应该说服您的用户,您不会耗尽他们的电池:)
您可以在此处从文档中获取更多信息:What's new in iOS7
答案 4 :(得分:0)
使用BGTaskScheduler在iOS 13上安排通知。