Проблема сравнения TimeInterval с целым числом - PullRequest
2 голосов
/ 23 сентября 2010

Я пытаюсь сравнить timeInterval с целочисленным значением, поэтому я пытаюсь преобразовать timeInterval в целое число и сравнить. Но я получаю сообщение об ошибке «Не удается преобразовать в тип указателя»:

NSTimeInterval timeInterval = [startTime timeIntervalSinceNow];
int intSecondsElapsed = [timeInterval intValue]; // Error here !!!!

if ([counterInt != intSecondsElapsed])
{
    // Do something here...
}

Как бы это сделать?

РЕДАКТИРОВАТЬ: Включить более подробную информацию, относящуюся к ошибке выполнения.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    //[formatter setDateFormat:@"HH:mm:ss"];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    startTime = [NSDate date];
    [formatter release];


if ([deviceType isEqualToString:@"iPhone 4"]||[deviceType isEqualToString:@"iPhone Simulator"])
    {
        int intSecondsElapsed = (int)[startTime timeIntervalSinceNow];
        if (counterInt != intSecondsElapsed)
        {
            counterInt = intSecondsElapsed;
        }
    }

Ответы [ 2 ]

6 голосов
/ 23 сентября 2010

NSTimeInterval определяется как double, поэтому, если вы хотите преобразовать его в int, вы можете сделать приведение простого типа

NSTimeInterval timeInterval = [startTime timeIntervalSinceNow];
int intSecondsElapsed = (int)timeInterval;

или просто

int intSecondsElapsed = (int)[startTime timeIntervalSinceNow];

Редактировать: Если вы инициализируете и используете переменную startTime в различных функциях, вам необходимо сохранить ее.[NSDate date] возвращает автоматически выпущенный объект, поэтому он становится недействительным вне области, в которой он был создан.Чтобы упростить задачу, объявите свойство с атрибутом retain для startTime и создайте его, используя

self.startTime = [NSDate date];

И не забудьте освободить его в своем методе dealloc класса.

2 голосов
/ 23 сентября 2010

То, что сказал Владимир, совершенно верно, я просто хотел добавить, что причина, по которой вы видите ошибку «Невозможно преобразовать в тип указателя», заключается в том, что вы пытались отправить сообщение intValue на timeInterval, которое вы может сделать, только если то, на что вы отправляете сообщение, является указателем на объект, который будет на него отвечать. Компилятор попытался обработать timeInterval как указатель, но потерпел неудачу.

...