2013-09-17 3 views
0

Что я делаю в моем запросе Parse, я проверяю, какие сообщения были отмечены (понравилось) за последние 7 дней. Затем я удаляю даты тех, у кого их нет. Это работает нормально. Теперь моя проблема в том, что мне нужно отсортировать их в моем UITableView в порядке убывания количества дат в массиве, но мой sortedArrayUsingComparator не работает. Im новое для Objective C, поэтому его возможно что-то легко, но idk. Вот мой кодСортировка PFQuery путем подсчета объектов в массиве

- (PFQuery *)queryForParse { 
PFQuery *query1 = [PFQuery queryWithClassName:self.parseClassName]; 

//[query1 selectKeys: [NSArray arrayWithContentsOfFile:[ NSString @"checkMark"]]]; 

[query1 whereKey:@"location" nearGeoPoint:[PFGeoPoint geoPointWithLatitude:[LocationController sharedSingleton].locationManager.location.coordinate.latitude longitude:[LocationController sharedSingleton].locationManager.location.coordinate.longitude] withinMiles:50]; 
[query1 findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error){ 

     placesArray = [[NSMutableArray alloc] initWithArray:objects]; 

     NSMutableArray *toDelete = [NSMutableArray array]; 
     NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
     [dateFormat setDateFormat:@"yyyyMMdd"]; 

     for (PFObject *tempObject in placesArray){ 
      checkDates = [[NSMutableArray alloc] initWithArray:[tempObject objectForKey:@"checkMarkDates"]]; 
      for (NSString *dateString in checkDates) { 
       NSDate *date = [dateFormat dateFromString: dateString]; 
       if ([date timeIntervalSinceNow] > -604800){ 
        [toDelete addObject:dateString]; 
       } 
      } 
      [checkDates removeObjectsInArray:toDelete]; 
      [tempObject removeObjectsInArray:checkDates forKey:@"checkMarkDates"]; 

      sortedArray = [placesArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
       NSUInteger *first = [[obj1 objectForKey:@"checkMarkDates"] count]; 
       NSNumber *f = [[NSNumber alloc] initWithInteger:first]; 
       NSUInteger *second = [[obj2 objectForKey:@"checkMarkDates"] count]; 
       NSNumber *s = [[NSNumber alloc] initWithInteger:second]; 

       return [f compare:s]; 
      }]; 
     } 

     NSLog(@"%@", sortedArray); 
    } 
    [placesTable reloadData]; 
}]; 
return query1; 

}

+0

Что не работает, сортировка не работает? Вы проверили, что 'placesArray' содержит значения, которые вы ожидаете, прежде чем передавать их в функцию сортировки? – ardrian

+0

Да, сортировка не работает. И yes placesArray содержит правильные значения – david2391

+0

Хорошо, предполагая, что placeArray содержит правильное значение, я не вижу, почему сортировка не работает. Следующим моим испытанием было бы вручную создать массив из 3 элементов, установить точку останова в конце блока сравнения и использовать ручку и бумагу, чтобы определить, почему сортировка не выполняется должным образом. – ardrian

ответ

0

Фигурные его. У меня был sortedArrayUsingComparator в инструкции for. Я переместил его, и теперь все работает отлично.

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