iphone - 出于测试目的在应用程序中设置 iPhone 日期/时间?

标签 iphone objective-c ios nsdate

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

最佳答案

另一种方法是提供 +(NSDate *)date 的自定义实现。您可以使用 JRSwizzle 调配此类方法.为 NSDate 创建一个小类别:

static NSTimeInterval seconds = 1300000000;

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

@implementation NSDate (Fixed)
+ (NSDate *)fixedDate
{
  return [NSDate dateWithTimeIntervalSince1970:seconds];
}
@end

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

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

日志打印出这个:

2011-09-01 11:35:27.844 tests[36597:10403] Date:2011-03-13 07:06:40 +0000

关于iphone - 出于测试目的在应用程序中设置 iPhone 日期/时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5730807/

相关文章:

iphone - 使用 IB 调整大小构建自定义 UITableViewCell?

objective-c - Safari 风格的选项卡 Cocoa 控件?

iphone - 如何停止定时器触发的运行循环?

iphone - 三个整数比较

ios - 让应用程序充当服务器

iphone - Objective-C:在 iPhone 上访问 REST API 的最佳方式

iphone - 在禁用滚动的 UITableView 上拖动时的行选择

iphone - 注册推送通知

ios - 当调用 becomeFirstResponder 时,UITextView 使应用程序崩溃

ios - Cordova iOS 构建失败 - cordova-plugin-splashscreen 导致它?