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