Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在功能启动Objective-C之前按下两次_Ios_Objective C_Nsdate - Fatal编程技术网

Ios 在功能启动Objective-C之前按下两次

Ios 在功能启动Objective-C之前按下两次,ios,objective-c,nsdate,Ios,Objective C,Nsdate,很抱歉,如果标题有点草率或混乱,我会尽量解释得更详细一点 我的应用程序中有一个功能,允许用户每天只使用10次。下面的代码处理每天的计数,这实际上工作得很好,只是在调用新循环之前,用户必须在新循环上按两下 我认为这与fabs功能有关,或者用户在新循环上必须按两次的原因是什么 -(void)dailyCount:(id)sender{ NSString *kFirstLaunchDateKey = @"tenPerDay"; NSDate *firstLaunchDate = [[N

很抱歉,如果标题有点草率或混乱,我会尽量解释得更详细一点

我的应用程序中有一个功能,允许用户每天只使用10次。下面的代码处理每天的计数,这实际上工作得很好,只是在调用新循环之前,用户必须在新循环上按两下

我认为这与
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];

    }
}