Установите numberOfRowsInSection для таблицы согласно массиву словарей - PullRequest
0 голосов
/ 04 июля 2018

У меня тут быстрый вопрос ...

Здесь у меня есть массив с именем arrayDishDetails

{
    "dishid": "5",
    "cusineid": "1",
    "dishname": "Cheese Fries",
    "dishimage": "noimage.png",
    "type": "NA",
    "description": "VEG FRIES",
    "price": "120",
    "swiggy_status": "enable",
    "preflag": "true",
    "pre": [
        {
            "preid": "112",
            "pretype": "Multi",
            "prenm": "BATTER FRIED FISH",
            "preprice": "70",
            "cat_id": "3"
        },
        {
            "preid": "109",
            "pretype": "Multi",
            "prenm": "JALAPENO POPPERS",
            "preprice": "50",
            "cat_id": "3"
        },
        {
            "preid": "110",
            "pretype": "Multi",
            "prenm": "CHICKEN SAUSAGES",
            "preprice": "50",
            "cat_id": "3"
        },
        {
            "preid": "111",
            "pretype": "Multi",
            "prenm": "CHICKEN NUGGETS",
            "preprice": "50",
            "cat_id": "3"
        },
        {
            "preid": "113",
            "pretype": "Multi",
            "prenm": "SHREDDED CHICKEN",
            "preprice": "50",
            "cat_id": "3"
        },
        {
            "preid": "114",
            "pretype": "Multi",
            "prenm": "CHICKEN POPCORN",
            "preprice": "50",
            "cat_id": "3"
        },
        {
            "preid": "105",
            "pretype": "Multi",
            "prenm": "GRATED CHEESE",
            "preprice": "30",
            "cat_id": "3"
        },
        {
            "preid": "272",
            "pretype": "Multi",
            "prenm": "Chili",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "273",
            "pretype": "Multi",
            "prenm": "Jalapeno Cheese",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "274",
            "pretype": "Multi",
            "prenm": "Salsa",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "275",
            "pretype": "Multi",
            "prenm": "BBQ",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "276",
            "pretype": "Multi",
            "prenm": "Mayo",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "277",
            "pretype": "Multi",
            "prenm": "Schezwan",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "278",
            "pretype": "Multi",
            "prenm": "Pizza Sauce",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "279",
            "pretype": "Multi",
            "prenm": "Chipotle",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "280",
            "pretype": "Multi",
            "prenm": "Tandoori",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "281",
            "pretype": "Multi",
            "prenm": "Garlic Mayo",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "282",
            "pretype": "Multi",
            "prenm": "Tartare sauce",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "283",
            "pretype": "Multi",
            "prenm": "Thai Sweet Chili",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "284",
            "pretype": "Multi",
            "prenm": "Makhani Gravy",
            "preprice": "20",
            "cat_id": "6"
        },
        {
            "preid": "106",
            "pretype": "Multi",
            "prenm": "CRUSHED TORTILLAS",
            "preprice": "20",
            "cat_id": "3"
        },
        {
            "preid": "107",
            "pretype": "Multi",
            "prenm": "BEANS",
            "preprice": "20",
            "cat_id": "3"
        },
        {
            "preid": "115",
            "pretype": "Multi",
            "prenm": "FRIED MAGGI",
            "preprice": "20",
            "cat_id": "3"
        },
        {
            "preid": "270",
            "pretype": "Multi",
            "prenm": "Chat Masala",
            "preprice": "10",
            "cat_id": "3"
        },
        {
            "preid": "108",
            "pretype": "Multi",
            "prenm": " MAGIC MASALA",
            "preprice": "10",
            "cat_id": "3"
        }
    ],
    "modifier_cat": [
        {
            "cat_id": "3",
            "cat_name": "ADD ONS",
            "modifier_selection": "1"
        },
        {
            "cat_id": "6",
            "cat_name": "Extra Sauces",
            "modifier_selection": "1"
        }
    ]
}

Теперь в моем табличном представлении я установил titleForHeaderInSection следующим образом.

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [[[self.arrayDishDetails valueForKey:@"modifier_cat"] valueForKey:@"cat_name"] objectAtIndex:section];
}

Я установил numberOfSectionsInTableView вот так ..

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[self.arrayDishDetails valueForKey:@"modifier_cat"] count];
}

Теперь мой вопрос: как мне отфильтровать массив "pre" , чтобы получить "prenm" по "cat_id" из " modifier_cat " Массив, чтобы я мог получить 2 разных категории?

Например: -

для "cat_id" = "3" Я хочу, чтобы все "prenm" вроде "prenm": "BATTER FRIED FISH", "JALAPENO POPPERS", "CHICKEN SAUSAGES" и т. д. из "pre" Array.

И то же самое для "cat_id" = "6"

Я искал много решений для массива фильтров, но не могу получить помощь для своего. Любая помощь приветствуется. Спасибо!

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

Я получил некоторую подсказку от ответа @Karthik, и я установил число чисел для моего табличного представления следующим образом:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cat_id = %@", [[[self.arrayDishDetails valueForKey:@"modifier_cat"]valueForKey:@"cat_id"]objectAtIndex:section]]; 
NSArray *filteredArray = [[self.arrayDishDetails valueForKey:@"pre"] filteredArrayUsingPredicate:predicate];

return filteredArray.count; 
}

Теперь, как мне установить "prenm" для каждого раздела (здесь 2 раздела 0 и 1) согласно "cat_id" из "modifier_cat" Массив?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Таким образом, вы можете сделать это следующим образом:

for cat in [self.arrayDishDetails valueForKey:@"modifier_cat"] {
    NSString *cat_id = [cat valueForKey:@"cat_id"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cat_id = %@", cat_id];
    NSArray *filteredArray = [pre filteredArrayUsingPredicate:predicate];
    //Here you will be getting your filtered array for cat_id 3 and 6 one after another, store it as per your requirement.
    NSArray *filteredprenmArrayForCatId = [filteredArray valueForKey:@"prenm"];    
}

Надеюсь, это поможет.

0 голосов
/ 04 июля 2018

Я думаю, вы собираетесь фильтровать массив с помощью пользовательских объектов. Я предполагаю, что JSON, который вы установили, сопоставлен с пользовательскими объектами. Добавьте приведенный ниже код для фильтрации предварительного массива с помощью cat_id из массива modifier_cat.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self getFilteredArray: section].count;
}

И чтобы отобразить ячейку с элементами, пожалуйста, используйте метод ниже

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: @"FishDetailsCell"];
    UILabel *fishStyle = [[UILabel alloc] initWithFrame: CGRectMake(0, 0, tableView.frame.size.width, 100)];
    Pre *pre = [[self getFilteredArray:indexPath.section] objectAtIndex: indexPath.row];
    fishStyle.text = pre.prenm;
    fishStyle.textAlignment = NSTextAlignmentCenter;
    [cell addSubview: fishStyle];
    return cell;
}

// Метод для повторного использования для фильтрации массива

- (NSArray *)getFilteredArray:(NSInteger)section {
    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"cat_id = %@", [[[self.arrayDishDetails valueForKey:@"modifier_cat"]valueForKey:@"cat_id"]objectAtIndex: section]];
    NSArray *filteredArray = [[self.arrayDishDetails valueForKey: @"pre"] filteredArrayUsingPredicate: predicate];
    return filteredArray;
}

Надеюсь, это поможет. Благодаря.

...