在iOS中每隔一段时间显示UIAlertView



我正在开发iPhone应用程序,我在一个点卡住了,

我想做的是,

当用户在一天中第一次启动应用程序时,我想向他显示一些警报。当他在同一天内第二次打开一个应用程序时,它不会收到提醒。(他只会在当天第一次发布应用程序时收到提醒)。

第二天,如果他再次打开应用程序,他将收到警报,第二次他将不会收到警报。

简而言之:用户应该在每天的第一次发布时获得警报。

有任何想法,我应该如何实现这一点吗? 提前谢谢。

我对NSDate有一个有用的分类,其中包括以下方法:

- (BOOL)isOnTheSameDayAs:(NSDate *)date
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components1 = [calendar components:(NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit |  NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit) fromDate:self];
    NSDateComponents *components2 = [calendar components:NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit |  NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit fromDate:date];
    return ((components1.year == components2.year) &&
            (components1.month == components2.month) &&
            (components1.day == components2.day));
}
- (BOOL)isToday
{
    return [self isOnTheSameDayAs:[NSDate date]];
}

做最必要的事情。稍后在app委托中,我将放置字段NSDate * lastReloadDate,我将初始化为"day zero"。最后一个动作:

- (void)applicationDidBecomeActive:(UIApplication *)application {
    if (![self.lastLoadDate isToday]) {
        // Show error here and don't forget to hide previous alert view or use singleton for UIALertView.
        self.lastLoadDate = [NSDate date];
    }
}
- (NSDate *)lastLoadDate {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDate *d = [defaults objectForKey:@"LastReload"];
    return d == nil ? [NSDate dateWithTimeIntervalSince1970:0] : d;
}
- (void)setLastLoadDate:(NSDate *)d {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:d forKey:@"LastReload"];
}

首先,你需要测试应用是否在一天内首次打开。如果你能做到这一点,那么一天只显示一次警报是非常容易的

//Check for new day
if (condition) {
    //For every new day you will clear the user default value
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AlertShownToday"];
    [[NSUserDefaults standardUserDefaults] synchronize];

}
//Below code will check wether the alert is shown for the day or not and accordingly will show alert
if (![[[NSUserDefaults standardUserDefaults] valueForKey:@"AlertShownToday"] boolValue]) {
    //Show Alert
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Test" message:@"Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
    [alert show];
    //Save in userdefault that alert has been shown
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AlertShownToday"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

在didFinishLaunchingWithOptions方法中使用上面的代码

希望这对你有帮助。Happy Coding:)

当用户启动应用程序时,可以将currentDate存储在NSUserDefaults中。现在,每当用户启动应用程序时,比较NSUserDefaults中的currentDatestoredDate

if (currentDate != [[NSUserDefaults standardUserDefaults] objectForKey:@"LastDate"]) {
    currentDate = [NSString stringWithFormat:@"%f",[NSDate date]];
    UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Day Changed" message:@"Welcome Back!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];
}

希望这有帮助!!

最新更新