在app中设置iPhone日期/时间以进行测试?

Mar*_*tin 6 iphone objective-c nsdate ios

我的应用程序中有许多依赖于日期/时间的功能(例如"如果日期是x,显示y).我使用[NSDate日期]来获取用户的当前日期/时间.我可以通过手动测试功能改变我的iPhone上的日期/时间,但我想知道是否有办法以编程方式覆盖当前时间,以便我可以在模拟器中更快地进行测试.

Vyt*_*tis 5

另一种方法是提供+(NSDate*)日期的自定义实现.你可以使用JRSwizzle调用这个类方法.为NSDate创建一个小类:

static NSTimeInterval seconds = 1300000000;

@interface NSDate (Fixed)
   + (NSDate *)fixedDate;
@end

@implementation NSDate (Fixed)
+ (NSDate *)fixedDate
{
  return [NSDate dateWithTimeIntervalSince1970:seconds];
}
@end
Run Code Online (Sandbox Code Playgroud)

然后在您想要具有固定日期的代码中执行以下操作:

NSError *error;
[NSDate jr_swizzleClassMethod:@selector(date) withClassMethod:@selector(fixedDate) error:&error];
NSLog(@"Date:%@", [NSDate date]);
Run Code Online (Sandbox Code Playgroud)

日志打印出来:

2011-09-01 11:35:27.844 tests[36597:10403] Date:2011-03-13 07:06:40 +0000
Run Code Online (Sandbox Code Playgroud)


Ray*_*eck 3

您可以使用您想要的任何日期/时间创建 NSDate 对象。只需通过一个方法运行您的代码即可获取“当前”时间,并在该方法内返回实际的生产日期或您选择的测试日期。