2015-10-06 2 views
0

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

-(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; 
} 
+0

Не могли бы вы уточнить, что вы пытаетесь достичь? Вы упомянули, что хотите, чтобы данные о ресторанах были отображены, поскольку они хранятся в бэкэнд, но при использовании браузера данных анализа данных вы можете изменить порядок, как вам нравится. Вы также упомянули сортировку по алфавиту, это не то, что вы хотите? – Russell

+0

Привет, Рассел ... Я не могу понять, в каком порядке заполняются заголовки разделов. Я хотел показать столбцы категорий как заголовки секций в том порядке, в котором он находится в браузере Parse. Вот скриншот http://imgur.com/iZojWjv раздел condiments должен отображаться первым, а остальные должны следовать за ним, но заголовки разделов скремблируются. –

+1

Если вам нужно сохранить порядок, вы должны использовать массив. По определению словари являются неупорядоченными структурами, и когда вы получаете разделы в 'titleForHeaderInSection', нет гарантии того, какой заказ будет. – Russell

ответ

0

Я исправил это, создав новый NSMutableArray. На самом деле я прочитал его с этого поста How can i get Original order of 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; 
} 
Смежные вопросы