【发布时间】:2013-06-25 12:06:00
【问题描述】:
我正在实施“每日奖励”方法,以便每天在我的游戏中给予一些硬币。
我有一个包含实际日期和时间的 json。
问题是我不知道如何比较日期。
这是我的代码 -
@implementation ItemRewardManager
+(NSDate *)dateFromUTCTimeStamp:(NSString *)dateString{
NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *myDate = [df dateFromString: dateString];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[df setTimeZone:gmt];
[[NSUserDefaults standardUserDefaults] setObject:myDate forKey:@"lastDatePlayed"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)getData
{
NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:dateUrl]];
id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
NSArray *keys = [jsonObjects allKeys];
// values in foreach loop
for (NSString *key in keys) {
NSLog(@"%@ is %@",key, [jsonObjects objectForKey:key]);
}
}
+(void)dailyReward{
NSLog(@"llega al daily");
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"HH:mm:ss zzz"];
NSDate *now = [NSDate date];
NSString *dateString = [dateFormat stringFromDate:now];
if([[[NSUserDefaults standardUserDefaults] objectForKey:@"lastDatePlayed"] isEqualToString: dateString])
{
NSLog(@"Actual date is the same as json date");
UIAlertView* alert = [[[UIAlertView alloc] initWithTitle:nil
message:@"You have win 5 coins! Come back tomorrow for more."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles: nil] autorelease];
[alert show];
return;
}
}
@end
所以,当我打开我的应用并调用此方法时,我的应用由于某种原因崩溃了。
我认为问题可能出在两个日期的比较上。
如果有什么问题,谁能告诉我?
【问题讨论】:
-
我不认为给予奖励是客户端的工作,而是服务器的工作。但是您是否已经调试过您的“lastDatePlayed”?您将其保存为 NSDate 对象并将其与 NSString 进行比较。可能是一个原因。顺便说一句,据我所知,这些结果永远不会相等:)
-
@geo 你是对的。我没有比较一些逻辑。我现在不知道每日奖励的逻辑......你能帮我吗?
-
我建议让服务器计算奖励,只需向您发送通知,您现在可以请求它。我也会让服务器发送一个 unix-timestamp,更易于使用。也可以使用@torip3ng 的答案来比较日期。并将值添加到日期,您可以使用
NSDateComponents和NSCalendar。 (NSDateComponents *comps = [[NSCalendar currentCalendar] components:NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit fromDate:date];) 即 -
@geo 我会尝试比较日期,因为另一个人给我做了一个带有日期的 json。所以我不能修改它。
-
我不认为你应该比较两个日期——你应该根据他/她自己的优点来考虑每个日期。并且以某种方式“奖励”“更好”的日期似乎有些不合时宜。 (SO 什么时候变成了日期线?)