Сравнить значение не работает (Objective-C) - PullRequest
0 голосов
/ 26 февраля 2010

В моем tableView на numberOfRowInSection я пытаюсь сравнить myDate внутри self.date с dateInFiche внутри self.allDates.

моя дата похожа на: 12-05-1986
в операторе For dateinFiche будет иметь следующие значения:
12-05-1986
12-05-1986
13-05-1986
18-05-1986

Когда оператор if встречается, первая дата совпадает, поэтому она увеличивает число numberFRows, вторая тоже будет такой же, но проблема в том, что если в данный момент не хотят выполняться Я использую точку останова, и значение совпадает, но если не работает. Есть идеи?


(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {</p>

<p>NSString *myDate = [self.date objectAtIndex:section];
int numberOfRows = 0;
  for (int i = 0; i [self.allDates count]; i++) {
 Date *dateFiche = (Date *)[self.allDates objectAtIndex:i];
 NSString *dateInFiche = [[dateFiche sDate] substringWithRange: NSMakeRange( 0,10)]; 
 if ( dateInFiche == myDate ) 
 {
  numberOfRows = numberOfRows+1;
 }
  }
 return numberOfRows;
}

Ответы [ 2 ]

4 голосов
/ 26 февраля 2010

Ну, это не сработает, потому что вы сравниваете указатель с объектом NSString напрямую с указателем с другим NSString объектом. Это сродни:

void *someBuf = calloc (100, 1);
void *anotherBuf = calloc (100, 1);

memcpy (someBuf, "test", 4);
memcpy (anotherBuf, "test", 4);

if (someBuf == anotherBuf)
{
    // won't branch even though their contents are identical
    ...

Нельзя сравнивать сами указатели, нужно сравнивать их содержимое. Вы можете сделать это с помощью NSString isEqualToString:.

if ([firstString isEqualToString:secondString])
{
    // will branch only if the strings have the same content
    ...
2 голосов
/ 26 февраля 2010

Ваш оператор if использует == для непосредственного сравнения двух строк. Это будет сравнивать только значения указателей, а не фактическое содержимое строки. Попробуйте вместо этого:

if ([dateInFiche isEqualToString:myDate]) {
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...