Ios 在功能启动Objective-C之前按下两次
很抱歉,如果标题有点草率或混乱,我会尽量解释得更详细一点 我的应用程序中有一个功能,允许用户每天只使用10次。下面的代码处理每天的计数,这实际上工作得很好,只是在调用新循环之前,用户必须在新循环上按两下 我认为这与Ios 在功能启动Objective-C之前按下两次,ios,objective-c,nsdate,Ios,Objective C,Nsdate,很抱歉,如果标题有点草率或混乱,我会尽量解释得更详细一点 我的应用程序中有一个功能,允许用户每天只使用10次。下面的代码处理每天的计数,这实际上工作得很好,只是在调用新循环之前,用户必须在新循环上按两下 我认为这与fabs功能有关,或者用户在新循环上必须按两次的原因是什么 -(void)dailyCount:(id)sender{ NSString *kFirstLaunchDateKey = @"tenPerDay"; NSDate *firstLaunchDate = [[N
fabs
功能有关,或者用户在新循环上必须按两次的原因是什么
-(void)dailyCount:(id)sender{
NSString *kFirstLaunchDateKey = @"tenPerDay";
NSDate *firstLaunchDate = [[NSUserDefaults standardUserDefaults] objectForKey:kFirstLaunchDateKey];
NSInteger count = [[NSUserDefaults standardUserDefaults] integerForKey:@"perDay"];
if (!firstLaunchDate) {
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:kFirstLaunchDateKey];
[[NSUserDefaults standardUserDefaults] setInteger:count+1 forKey:@"perDay"];
return;
}
NSTimeInterval diff = fabs([firstLaunchDate timeIntervalSinceNow]);
if (diff > 60 * 60 * 24 * 1) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"tenPerDay"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"perDay"];
}else{
if (count % 11 == 0) {
[UIAlertView showWithTitle:@"Daily Limit Exceeded"
message:@"Sorry, you can use this option only 10 times per day."
cancelButtonTitle:@"Ok"
otherButtonTitles:nil
tapBlock:^(UIAlertView *alertView, NSInteger buttonIndex) {
if (buttonIndex == [alertView cancelButtonIndex]) {
}
}];
}else {
// do something here... (Have to press twice on a new loop before it's getting called)
[[NSUserDefaults standardUserDefaults] setInteger:count+1 forKey:@"perDay"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
}
如果没有firstLaunchDate,它将创建一个新的启动日期,但返回时不做任何操作,这不是因为您的初始条件吗?然后,当您再次按下它时,它将实际开始执行某些操作。您是否正在执行
count%11==0
,而不只是检查count>10
?另外,为什么要删除每天存储在中的对象而不是将其设置为0?感谢大家指出,修复了它,将在几秒钟内发布答案。只支持代码的答案是不受欢迎的。解释问题是什么以及答案是如何解决的。正如@Yarneo所说,方法if(firstlaunchdate)将第一次被调用,并且它只设置了NSUSERDefault,因此我将函数拆分为在另一个空格中进行计数,并在if(firstlaunchdate)中调用它。但我真的很惊讶我没有看到那个。
-(void)dailyCount:(id)sender{
NSString *kFirstLaunchDateKey = @"tenPerDay";
NSDate *firstLaunchDate = [[NSUserDefaults standardUserDefaults] objectForKey:kFirstLaunchDateKey];
if (!firstLaunchDate) {
[[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:kFirstLaunchDateKey];
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"perDay"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self counterNew];
return;
}
NSTimeInterval diff = fabs([firstLaunchDate timeIntervalSinceNow]);
if (diff > 60 * 60 * 24 * 1) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"tenPerDay"];
[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"perDay"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self counterNew];
}else{
[self counterNew];
}
}
-(void)counterNew{
NSInteger count = [[NSUserDefaults standardUserDefaults] integerForKey:@"perDay"];
if (count > 10) {
[UIAlertView showWithTitle:@"Daily Limit Exceeded"
message:@"Sorry, you can use this option only 10 times per day."
cancelButtonTitle:@"Ok"
otherButtonTitles:nil
tapBlock:^(UIAlertView *alertView, NSInteger buttonIndex) {
if (buttonIndex == [alertView cancelButtonIndex]) {
}
}];
}else {
//Do something here...
[[NSUserDefaults standardUserDefaults] setInteger:count+1 forKey:@"perDay"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}