Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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 运行时间和设置日期?_Ios_Cocos2d Iphone_Nsdate - Fatal编程技术网

Ios 运行时间和设置日期?

Ios 运行时间和设置日期?,ios,cocos2d-iphone,nsdate,Ios,Cocos2d Iphone,Nsdate,以下是我试图实现的目标:用户只需点击一个按钮,就可以在facebook上分享一些东西。用户按下按钮的日期已设置,在24秒钟内,用户无法再次向facebook共享任何内容。24秒后,用户可以在facebook上分享另一篇帖子 该错误与facebook无关,但与elapsedTime有关。重置elapsedTime后,它不会返回到24。它只是停留在一个非常小的数字,如“0.0043” 这是我的密码: -(void)postToFacebook { if (elapsedTime >=

以下是我试图实现的目标:用户只需点击一个按钮,就可以在facebook上分享一些东西。用户按下按钮的日期已设置,在24秒钟内,用户无法再次向facebook共享任何内容。24秒后,用户可以在facebook上分享另一篇帖子

该错误与facebook无关,但与elapsedTime有关。重置elapsedTime后,它不会返回到24。它只是停留在一个非常小的数字,如“0.0043”

这是我的密码:

-(void)postToFacebook
{
    if (elapsedTime >= 24) {
        [[CCDirector sharedDirector] pause];
        [[CCDirector sharedDirector] stopAnimation];

        CCAppDelegate *app = (CCAppDelegate*) [[UIApplication sharedApplication] delegate];


        SLComposeViewController *faceBookPost = [SLComposeViewController     composeViewControllerForServiceType:SLServiceTypeFacebook];

        [faceBookPost setInitialText:@"test"];
        [faceBookPost addURL:[NSURL URLWithString:@"http://www.google.com"]];

        [[app navController] presentModalViewController:faceBookPost animated:YES];
        faceBookPost.completionHandler = ^(SLComposeViewControllerResult result)
        {
            [[CCDirector sharedDirector] resume];
            [[CCDirector sharedDirector] startAnimation];
            [[app navController] dismissModalViewControllerAnimated:YES];
            dogeAmount.string = [NSString stringWithFormat:@"%.2LF", _doge];
            [self setDate];
            NSLog(@"Posted to Facebook");
        };
    } else if (elapsedTime < 24) {
        NSLog(@"%f", elapsedTime);
    }
}
我搞不清楚我做错了什么

只需保存日期:

-(void)setStartTime {
    defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[NSDate date] forKey:@"startTime"];
}
- (BOOL)isTimeExpired {
    defaults = [NSUserDefaults standardUserDefaults];
    NSDate *startedDate = [defaults objectForKey:@"startTime"];
    NSTimeInterval elapsedTime = -[startedDate timeIntervalSinceNow];
    return elapsedTime > 24;
}
稍后检索日期:

-(void)setStartTime {
    defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[NSDate date] forKey:@"startTime"];
}
- (BOOL)isTimeExpired {
    defaults = [NSUserDefaults standardUserDefaults];
    NSDate *startedDate = [defaults objectForKey:@"startTime"];
    NSTimeInterval elapsedTime = -[startedDate timeIntervalSinceNow];
    return elapsedTime > 24;
}

注:
NSDate
仅是自2001年1月1日格林尼治标准时间第一刻起的秒数。

您不断地将
[NSDate date]
与现在进行比较,这将只是实例化与现在之间的时间。这就是它总是很小的原因

另外,如果您想禁用按钮,为什么不禁用它并安排一个方法在24秒延迟后启用它呢

h

m


您的基本问题是,您在
setDate
方法中计算
elapsedTime
,但您只在发布Facebook后立即调用
setDate
一次,因此
elapsedTime
在初始设置之后永远不会更改

我假设您也将发布日期存储在
NSUserDefaults
中,以便您可以跟踪应用程序启动期间的值?如果是这样,您在哪里读取返回的值?在
视图中加载

我将去掉
elapsedTime
变量,并创建一个
postDate
@property
-

@property (strong,nonatomic) NSDate *postDate;
然后,在
viewDidLoad
方法中-

self.postDate=[[NSUserdefaults standardUserDefaults] objectForKey:@"postDateKey"];
现在您的
postToFaceBook
可以-

-(void)postToFacebook
{
    if (self.postDate ==  nil || [self.postDate timeIntervalSinceNow] > 24) {

        [[CCDirector sharedDirector] pause];
        [[CCDirector sharedDirector] stopAnimation];

        CCAppDelegate *app = (CCAppDelegate*) [[UIApplication sharedApplication] delegate];


        SLComposeViewController *faceBookPost = [SLComposeViewController     composeViewControllerForServiceType:SLServiceTypeFacebook];

        [faceBookPost setInitialText:@"test"];
        [faceBookPost addURL:[NSURL URLWithString:@"http://www.google.com"]];

        [[app navController] presentModalViewController:faceBookPost animated:YES];
        faceBookPost.completionHandler = ^(SLComposeViewControllerResult result)
        {
            [[CCDirector sharedDirector] resume];
            [[CCDirector sharedDirector] startAnimation];
            [[app navController] dismissModalViewControllerAnimated:YES];
            dogeAmount.string = [NSString stringWithFormat:@"%.2LF", _doge];
            self.postDate=[NSDate date];
            [[NSUserDefaults standardDefaults] setObject:self.postDate forKey:@"postDateKey"];
            NSLog(@"Posted to Facebook");
        };
    }
}

执行此操作的简单方法是从NSObject、、上的performSelector:afterDelay:方法获取一个空闲计时器

- (void)disablePosting {
    // set a property that disallows posting, like a bool, or even better
    // do something to the ui that disables, like disabling the button
    self.postingEnabled = NO;
}

- (void)enablePosting {
    self.postingEnabled = YES;
}
然后,要禁用24秒,请执行以下操作:

[self disablePosting];
[self performSelector:@selector(enablePosting) afterDelay:24];
您的FB代码如下所示:

if (self.postingEnabled) {
    // do the fb request here, without any references to timeout other than

}
现在,您可以取出所有其他与日期和时间相关的代码

一个小问题,记住取消dealloc上的执行请求

- (void)dealloc {
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
}

谢谢,经过一些修改,我使它工作了。我这样做是为了当用户第一次启动应用程序时,dateSinceNow设置为24,因此用户不必在第一次打开应用程序后等待24秒才能发布。我还遇到了一个小问题,每次用户单击按钮时计时器都会自动重置,我通过禁用按钮解决了这个问题。
- (void)dealloc {
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
}