сравнить два NSDate не удается - PullRequest
2 голосов
/ 05 марта 2011

Я пытаюсь сравнить два объекта NSDate.Но он все время терпит неудачу, и я не вижу, что не так.

  -(IBAction)nextAction
{
    NSDate *today = [NSDate date];
    if([appStateDate compare:today] == NSOrderedAscending) {
        dispatch_async(calcQueue, ^{ [self plusOneDate]; });
    }
}

Без кода все работает нормально.

просто вылетает, и EXE_BAD_ACCESS на этой строке в основном методе.

 int retVal = UIApplicationMain(argc, argv, nil, nil);

И печатает

'+[ compare:]: unrecognized selector sent to class 0x634d7e0`'

Я не очень хорош в использовании отладчика, поэтому, если вы знаете какие-либо хорошие учебники или руководства, я хотел бы знать их;) Извините за мой английский

Ответы [ 5 ]

3 голосов
/ 05 марта 2011

Похоже, appStateDate не инициализирован или содержит что-то отличное от NSDate.Где ты это инициализируешь?

2 голосов
/ 08 ноября 2011

для сравнения 2 NSDate даты:

NSDate *date1; NSDate *date2;
if ([date1 timeIntervalSinceDate:date2] > 0) 
    // date1 is newer.
0 голосов
/ 06 марта 2011

На самом деле проблема была в сегодняшнем дне. Адрес памяти был в консоли, и я завис над объектами, чтобы найти тот, который соответствует. Я просто сохранил его и выпустил в конце метода. Спасибо за все ваши ответы;)

0 голосов
/ 06 марта 2011

Прежде всего, я настоятельно рекомендую вам взглянуть на Руководство по программированию управления памятью , чтобы получить более полное представление об управлении памятью.

Мне кажется, что appStateDate неболее длинный экземпляр класса NSDate из-за способа его размещения.Когда вы используете [NSDate date], вы на самом деле говорите [[[NSDate alloc]init]autorelease], чтобы объект был освобожден до того, как вы сможете его использовать.Обычно, что вы хотите сделать с объектами экземпляра класса, это alloc и init их, а затем release их в методе dealloc.

Я надеюсь, что это поможет вам

0 голосов
/ 06 марта 2011

Из этой темы, я бы сказал, как @ Seva-Alekseyev, в - (IBAction) nextAction , appStateDate не выглядит как объявленный / инициализированный.

Возможно, вам следует написать то, что у вас уже есть, в вашем методе - (void) plusOneDate .

Просто чтобы проверить, вы также можете NSLog тип переменной и значение appStateDate , чтобы увидеть, является ли он тем, чем он должен быть.

Я тоже новичок, я не уверен, но просто пытаюсь помочь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...