Упорядочить категории (столбцы), поскольку они хранятся в бэкэнде Parse.

Я пытаюсь заполнить данные о ресторанах из Parse данными столбца «Категория» в качестве заголовка раздела для списка элементов. Однако названия разделов для элементов отображаются случайным образом. Я хочу, чтобы они отображались так, как они хранятся в бэкэнде. Я пытался выполнить [запрос orderByAscending:@"Category"]; который сортирует категории в алфавитном порядке и не меняет результатов. Ниже приведена моя текущая реализация...

-(void) listAllItems {

    PFQuery *query  = [PFQuery queryWithClassName:[NSString stringWithString:self.restaurantName]];


    [query whereKey:@"DinnerLunch" containsString:self.lunchDinnerPreference];

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {

            for (PFObject *obj in objects) {

                self.curatedItemDictionary = [[NSMutableDictionary alloc]init];

                [_curatedItemDictionary setValue:[obj objectForKey:@"ItemName"] forKey:@"ItemName"];
                [_curatedItemDictionary setValue:[obj objectForKey:@"Price"] forKey:@"Price"];
                [_curatedItemDictionary setValue:[obj objectForKey:@"Category"] forKey:@"Category"];

                [_curatedItemDictionary setValue:@"" forKey:@"ModifiableItems"];
                _sectionsArray = [_sectionsDictionary objectForKey: [obj objectForKey:@"Category"]];

                if(nil == _sectionsArray){
                    self.sectionsArray = [[NSMutableArray alloc]init];
                }

                [_sectionsArray addObject:_curatedItemDictionary];
                [_sectionsDictionary setObject: _sectionsArray forKey: [obj objectForKey:@"Category"]];

                NSLog(@"categories keys are %@", [self.sectionsDictionary allKeys]);
            }            

            [self.tableView reloadData];
            } else {
                // Log details of the failure
                NSLog(@"Error: %@ %@", error, [error userInfo]);
            }
        }];
    }

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return [_sectionsDictionary count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    NSArray *keys = [self.sectionsDictionary allKeys];

    return [keys objectAtIndex:section];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSArray *keys = [self.sectionsDictionary allKeys];
    id aKey = [keys objectAtIndex:section];
    NSMutableArray *arr = [self.sectionsDictionary objectForKey:aKey];
    return (arr) ? arr.count : 0;
}

person Rider Forest    schedule 06.10.2015    source источник
comment
Не могли бы вы уточнить, чего вы пытаетесь достичь? Вы упомянули, что хотели бы, чтобы данные ресторана отображались так, как они хранятся в бэкэнде, но при использовании браузера данных Parse вы можете изменить порядок по своему усмотрению. Вы также упомянули сортировку по алфавиту, разве это не то, чего вы хотите?   -  person Russell    schedule 06.10.2015
comment
Привет, Рассел... Я не могу понять, в каком порядке заполняются заголовки разделов. Я хотел отобразить столбец категорий в качестве заголовков разделов в том порядке, в котором он находится в браузере Parse. Вот скриншот imgur.com/iZojWjv, раздел приправы должен отображаться первым, а остальные должны следовать за ним, но заголовки разделов зашифрованы.   -  person Rider Forest    schedule 06.10.2015
comment
Если вам нужно сохранить порядок, вы должны использовать массив. Словари по определению являются неупорядоченными структурами, и когда вы получаете разделы в titleForHeaderInSection, нет гарантии, в каком порядке они будут.   -  person Russell    schedule 06.10.2015
comment
Спасибо, Рассел. Истинный. давайте попробуем сохранить их в массиве.   -  person Rider Forest    schedule 06.10.2015
comment
Я не могу сделать это с помощью массивов. есть ли другой способ классифицировать мои предметы? как новый столбец, чтобы различать набор предметов, таких как закуски, основное блюдо, десерты и т. д.?   -  person Rider Forest    schedule 07.10.2015
comment
Я бы сказал, что у вас обязательно должна быть какая-то категоризация. Вы также можете изучить использование UICollectionView для каждой категории, а затем, когда пользователь выбирает одну, вы можете загрузить все эти соответствующие элементы.   -  person Russell    schedule 07.10.2015
comment
Я исправил это, создав новый NSMutableArray без дубликатов и показав их в titleForHeaderInSection. Спасибо, Рассел, за то, что указал мне правильное направление.   -  person Rider Forest    schedule 07.10.2015


Ответы (1)


Я исправил это, создав новый файл NSMutableArray. На самом деле я прочитал это из этого сообщения Как я могу получить исходный порядок NSDictionary/NSMutableDictionary?

Я добавил эту строку во время повторения моих PFObjects [_categoryMutableArray addObject:[obj objectForKey:@"Category"]];, а затем я использовал строки ниже в своих titleForHeaderInSection и numberOfRowsInSection

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{        
    return [_categoryMutableArray objectAtIndex:section];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//    NSArray *keys = [self.sectionsDictionary allKeys];
    id aKey = [_categoryMutableArray objectAtIndex:section];
    NSMutableArray *arr = [self.sectionsDictionary objectForKey:aKey];
    return (arr) ? arr.count : 0;
}
person Rider Forest    schedule 07.10.2015