我使用以下代码每天上午8:00使用本地通知从myArray(NSArray)生成随机消息。但它不起作用。我每天都会得到同样的信息,即如果今天我得到“测试3”,那么第二天早上8点我会得到像“测试3”这样的消息。我想从该数组生成随机消息。
我不知道我的代码中有什么问题。 Bellow是我生成随机消息的示例代码:
[[UIApplication sharedApplication] cancelAllLocalNotifications];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
// Get the current date
NSDate *Systemdate = [NSDate date];
// Break the date up into components
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit )
fromDate:Systemdate];
// Set up the fire time
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:8];
// Notification will fire in one minute
[dateComps setMinute:0];
[dateComps setSecond:0];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
[dateComps release];
NSArray *myArry = [NSArray arrayWithObjects:@"Test 1", @"Test 2",@"Test 3",@"Test 4",@"Test 5",@"Test 6", nil];
id randomObj = nil;
int randomIndex;
if([myArry count]>0){
randomIndex = arc4random() % [myArry count];
randomObj = [myArry objectAtIndex:randomIndex];
}
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
// Notification details
localNotif.alertBody = [NSString stringWithFormat:@"%@", randomObj];
localNotif.fireDate = itemDate;
localNotif.timeZone = [NSTimeZone defaultTimeZone];
// Set the action button
localNotif.alertAction = @"View Alert";
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 1;
localNotif.repeatInterval = NSDayCalendarUnit;
// Specify custom data for the notification
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"someValue" forKey:@"someKey"];
localNotif.userInfo = infoDict;
// Schedule the notification
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[localNotif release];
先谢谢!! !!
答案 0 :(得分:0)
我认为您的问题在于“localNotif.repeatInterval = NSDayCalendarUnit;”,您每天都会重新安排相同的通知,这就是您拥有相同内容的原因。如果您希望每次必须为每个随机值创建单独的通知对象并手动计划它们时使用其他文本。例如,您可以安排10个或更多事件,将最后安排的日期保存在用户默认值中,并制作一些逻辑,以便在您上次保存日期之前的2天或之类的情况下重新安排另外10天或更长时间。 你需要对此进行测试,理论上它看起来很好而且它应该可行。希望这会有所帮助。