доступ к objectatIndex в NSMutableArray - PullRequest
0 голосов
/ 18 ноября 2011

Я хочу знать, действителен ли приведенный ниже код строки в задаче C

  if (dtDay < [m_array objectAtIndex:m_histCount-1]);

                       OR

  if (dtDay < [m_array objectAtIndex:i+1]);

здесь m_array имеет тип NSMutableArray .....

также эта строка кода

NSDate *date = [self getDate];

С уважением Ранджит

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011
[m_array objectAtIndex:m_histCount-1]

и

[m_array objectAtIndex:i+1]

вернут объект, , и вы не можете проверить объект с помощью <.Это означает, что эти две строки недопустимы. </s>

Однако в любой ситуации, когда вы ожидаете объект, получение их непосредственно из массива будет работать.Это даже работает:

if([[[m_array objectAtIndex:i+1] date] timeIntervalSinceDate:[m_array objectAtIndex:m_histCount-1] < 0])

То есть работает, если эти индексы возвращают объекты NSDate.

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

Редактировать:

Оказывается, вы можете сравнивать объекты с операндами <и>, но это бесполезно.Вы сравниваете значения их указателей, которые являются довольно случайным идентификатором.Это означает, что ваши строки верны, я думаю, но не очень полезны.

Источник: Как сравнивать объекты, используя оператор <или> в Objective-C?

0 голосов
/ 18 ноября 2011

Вы можете сравнить объекты NSDate со сравнением: LaterDate: или earlyDate: селекторы

NSComparisonResult result = [date1 compare:date2];
NSDate* earlierDate = [date1 earlierDate:date2];
NSDate* laterDate = [date1 laterDate:date2];

Вы также можете отсортировать весь NSArray дат за один раз:

NSArray* sortedDateArray = [dateArray sortedArrayUsingSelector:@selector(compare:)];

Строка:

NSDate *date = [self getDate];

Действителен, если self отвечает на селектор getDate и возвращает NSDate (или подкласс, что маловероятно).

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