Установить дату / время iPhone в приложении для тестирования? - PullRequest
6 голосов
/ 20 апреля 2011

У меня много функций в приложении, которые зависят от даты / времени (например, «если дата равна x, покажите y). Я использую [NSDate date], чтобы получить текущую дату / время пользователя. Я могу проверить с помощью ручного изменения даты / времени на моем iPhone, но мне интересно, есть ли способ программно перезаписать текущее время, чтобы я мог тестировать в симуляторе и быстрее.

Ответы [ 4 ]

5 голосов
/ 01 сентября 2011

Другой способ сделать это - предоставить пользовательскую реализацию даты + (NSDate *).Вы можете использовать этот метод класса, используя 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
3 голосов
/ 20 апреля 2011

Вы можете создавать объекты NSDate с любой желаемой датой / временем. Просто запустите свой код через метод, чтобы получить «текущее» время, и внутри этого метода либо верните реальную дату производства или какую-либо дату по вашему выбору для тестирования.

2 голосов
/ 21 ноября 2014

Создать категорию на NSDate и переопределить +[NSDate date] метод

+ (instancetype)date
{
  return [NSDate dateWithTimeIntervalSince1970:100000]; // Replace with any date you want
}
0 голосов
/ 20 апреля 2011

dateByAddingTimeInterval:

Возвращает новый объект NSDate, для которого задано указанное количество секунд относительно получателя.

- (id)dateByAddingTimeInterval:(NSTimeInterval)seconds

Параметры секунд Количество секунд, которое нужно добавить к получателю. Используйте отрицательное значение в течение нескольких секунд, чтобы возвращаемый объект указывал дату перед получателем. Возвращаемое значение Новый объект NSDate, для которого заданы секунды-секунды относительно получателя. Возвращенная дата может иметь представление, отличное от получателя.

источник: документация: p

...