2016-09-28 5 views
-1

В массиве есть 5 элементов, в том, что 2 элемента имеют данные, а другие элементы пустые, а в виде таблицы - оба элемента, но когда я прокручиваю приложение crash.i, нужно показать menu_name в разделе и его работе, но когда я прокручиваю табличное окно, приложение падает, потому что, может ли кто-нибудь дать мне решение?IOS, Tableview Objective C,

Вот ответ, который я должен показать в Tableview

"status":"true", 
    "message":"food point menu available", 
    "data":[ 
    { 
     "menu_id":"9", 
     "menu_name":"Morning Menu", 
     "food_list":[ 
     { 
      "food_name":"Brigadeiros", 
      "foodtype":"Pastas", 
      "food_per_person":"20", 
      "food_bonus":"packing" 
    }, 
    { 
     "food_name":"Cachaca", 
     "foodtype":"Pastas", 
     "food_per_person":"30", 
     "food_bonus":"packing" 
    } 
    ] 
    }, 
    { 
    "menu_id":"10", 
    "menu_name":"Afternoon Menu", 
     "food_list":[ 
     { 
      "food_name":"Quindim", 
      "foodtype":"Pastas", 
      "food_per_person":"30", 
      "food_bonus":"packing" 
     }, 
     { 
      "food_name":"Cachaca", 
      "foodtype":"Pastas", 
      "food_per_person":"30", 
      "food_bonus":"packing" 
     } 
    ] 
    }, 
    { 
    "menu_id":"12", 
    "menu_name":"Evening Menu", 
    "food_list":"" 
    }, 
    { 
    "menu_id":"17", 
    "menu_name":"MenuSegundaFeira", 
    "food_list":"" 
    }, 
    { 
    "menu_id":"18", 
    "menu_name":"MenuTercaFeira", 
    "food_list":"" 
    } 
    ] 
    } 

И это код, который я написал в моем приложении

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

{ 
    if([FinalArrayCategory count]>0) { 
     return [[[FinalArrayCategory objectAtIndex:0] objectForKey:@"food_list"] count]; 
    } 
    else 
    { 
     return 0; 
    } 
} 
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    if([FinalArrayCategory count]>0) { 
     return [[FinalArrayCategory valueForKey:@"menu_name"] count]; 
    } 
    else 
    { 
     return 0; 
    } 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    NSString *sectionName; 
    sectionName =[[FinalArrayCategory valueForKey:@"menu_name"] objectAtIndex:section]; 
    return sectionName; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    MenuListCELL *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    cell.lblpice.text=[[[[FinalArrayCategory objectAtIndex:indexPath.section]objectForKey:@"food_list"] valueForKey:@"food_name"]objectAtIndex:indexPath.row]; 

    // cell.lblType.text=[[FinalArrayCategory valueForKey:@"category_name"] objectAtIndex:indexPath.row]; 



    // cell.lblBonus.text=[[FinalArrayCategory valueForKey:@"food_bonus"] objectAtIndex:indexPath.section]; 

    // cell.lblFoodName.text=[[FinalArrayCategory valueForKey:@"menu_name"] objectAtIndex:indexPath.section]; 

    // 

    // NSString *pickURL=[[FinalArrayCategory valueForKey:@"food_image"] objectAtIndex:indexPath.section]; 

    // [cell.lblImage sd_setImageWithURL:[NSURL URLWithString:pickURL] placeholderImage:[UIImage imageNamed:@"itemplaceholder.jpg"] options:SDWebImageProgressiveDownload progress:^(NSInteger receivedSize, NSInteger expectedSize) { 

    // } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 

    // }]; 
    return cell; 
} 
+0

пожалуйста показать задание в массиве –

+0

Start путем разбора JSON в объекты. Не работайте со словарями. Не используйте 'valueForKey:'. Используйте 'objectForKey:' или индекс. – Sulthan

+0

Это поможет увидеть выход из навигатора отладки, чтобы помочь определить проблему. Однако я лично буду смотреть на cellForRowAtIndexPath и будет обертывать некоторую логику вокруг valueForKey: @ «food_name», поскольку, как я думаю, вы обнаружите, что это не удастся, если «food_list» is «», поскольку у вас нет значения valueKey food_name. Поэтому либо добавьте пустые значения в свой файл food_list для ключей, либо проверьте, существуют ли ключи. – Longmang

ответ

1

Пожалуйста, попробуйте этот код ..

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     return [[[FinalArrayCategory objectAtIndex:section] objectForKey:@"food_list"] count]; 
    } 
    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 

     return [FinalArrayCategory count]; 

    } 

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
    { 
     NSString *sectionName; 
     sectionName =[[FinalArrayCategory objectAtIndex:section] objectForKey:@"menu_name"]; 
     return sectionName; 
    } 

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    MenuListCELL *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if ([[[FinalArrayCategory objectAtIndex:indexPath.section] objectForKey:@"food_list"] iskindOfClass:[NSArray class]]) { 
     NSDictionary *dictData=[[[FinalArrayCategory objectAtIndex:indexPath.section] objectForKey:@"food_list"] objectAtIndex:indexPath.row]; 
     cell.lblpice.text=[dictData objectForKey:@"food_name"]; 

    }else{ 
     [email protected]""; 
    } 
     return cell; 
} 

И дайте мне знать о его работе или нет.

Happy Coding !!

+0

@ Этан в аренду ценит с повышением или отметкой в ​​качестве правильного ответа. :) –

+0

Извините @ Ravi, я был немного занят, но спасибо за код и помогу ему очень помочь. – Ethan

+0

@ Это хорошо. наиболее желанный. ;) –

0
return [[[FinalArrayCategory objectAtIndex:0] objectForKey:@"food_list"] count]; 

изменение objectAtIndext от 0 до IndexPath.section

-1
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    MenuListCELL *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if([FinalArrayCategory objectAtIndex:indexPath.section]objectForKey:@"food_list"].count>0){ 

     NSString *foodName =[[[[FinalArrayCategory objectAtIndex:indexPath.section]objectForKey:@"food_list"] valueForKey:@"food_name"]objectAtIndex:indexPath.row]; 
     if(foodName){ 

      cell.lblpice.text=foodName; 
     } 



    }else{ 
     [email protected]""; 

    } 


    return cell; 
} 

пожалуйста, попробуйте этот

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