2010-09-23 2 views
2

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

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

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

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

EDIT: Включите более подробную информацию, касающуюся ошибки выполнения.

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; 
     } 
    } 
+0

У вас также синтаксическая ошибка в коде. 'if! ([counterInt == intSecondElapsed])' не должно иметь квадратных скобок вокруг него. Кроме того, вы можете упростить инструкцию следующим образом: 'if (counterInt! = IntSecondsElapsed)' – Jasarien

+0

Спасибо, я понял, что при компиляции. Я отредактировал свой вопрос, чтобы отразить ваши изменения. – Stephen

ответ

6

NSTimeInterval определяется как двойной, так что если вы хотите, чтобы преобразовать его в Int вы можете сделать простой тип литой

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

или просто

int intSecondsElapsed = (int)[startTime timeIntervalSinceNow]; 

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

self.startTime = [NSDate date]; 

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

+0

Спасибо, что сработало. – Stephen

+0

Владимир, ваш код скомпилирован, но я получаю «EXE_BAD_ACCESS» при выполнении в строке «int intSecondsElapsed = (int) [startTime timeIntervalSinceNow];» – Stephen

+0

Да, это решило. – Stephen

2

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

Смежные вопросы