2016-01-12 5 views
0

У меня есть allSpecialities array, и selectedSpecialities массив. Я загружаю эти массивы с сервера, анализирую их на объект и добавляя их в эти массивы. Теперь, я хочу проверить/снять некоторые особенности. Я пробовал с containsObject, но это не работает, потому что эти объекты не находятся в одном месте памяти. Это код, который я сделал до сих пор, и он работает, но у меня есть проблема, как добавить их в этот массив. в cellForRowAtIndexPath:Добавление/удаление объекта в изменяемый массив

for (Speciality *specTemp in self.selectedSpecialities) { 
     if (speciality.specialityId == specTemp.specialityId) { 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 
      break; 
     } 
     else { 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
    } 

в didSelect:

Speciality *speciality = [[Speciality alloc]init]; 
    speciality = self.allSpecialities[indexPath.row]; 
    NSMutableArray *tempSelectedSpecialities = [[NSMutableArray alloc]initWithArray:self.selectedSpecialities]; 
    int i=0; 
    for (Speciality *tempSpeciality in tempSelectedSpecialities) { 
     if (tempSpeciality.specialityId == speciality.specialityId) { 
      [self.selectedSpecialities removeObjectAtIndex:i]; 
     } 
     else { 

     } 
     i++; 
    } 

    [self.delegate companySpecialities:self.selectedSpecialities]; 
    [self.specialitiesTableView reloadData]; 
+0

начинающих ошибка: В didSelect, вы создаете Specialty объект, а затем сразу же перезаписать. Не делай этого. – gnasher729

+0

Можете ли вы объяснить мне, как это сделать по-другому? – Stefan

+0

'Specialty * speciality = self.allSpecialities [indexPath.row];' как это. – rptwsthi

ответ

3

У меня объявить один массив изменяемых в .h для хранения данных

NSMutableArray *selectedMarks; 

назначения памяти в viewDidLoad

selectedMarks = [NSMutableArray new]; 

добавить и удалить объект в didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    TableViewCell *cell = (TableViewCell *)[self.tblview cellForRowAtIndexPath:indexPath]; 


    NSString *strIndex=[NSString stringWithFormat:@"%ld",(long)indexPath.section]; 

    if ([selectedMarks containsObject:strIndex])// Is selected? 
    { 
     [selectedMarks removeObject:strIndex]; 
    } 
    else{ 
     [selectedMarks addObject:strIndex]; 
     } 
} 

в cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     static NSString *CRTableViewCellIdentifier = @"TableViewCell"; 
     TableViewCell *cell = (TableViewCell *)[self.tblview dequeueReusableCellWithIdentifier:CRTableViewCellIdentifier]; 
     if (cell == nil) { 
      cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CRTableViewCellIdentifier]; 
     } 
     cell.backgroundColor=[UIColor colorWithRed:122/255.0 green:196/255.0 blue:251/255.0 alpha:1]; 

     // Check if the cell is currently selected (marked) 
      NSString *txtQRCodeid = [[[dictListQR objectForKey:@"boxlist"]objectAtIndex:indexPath.section]valueForKey:@"qr_code_id"]; 

NSString *text1 = [[[dictListQR objectForKey:@"boxlist"]objectAtIndex:indexPath.section]valueForKey:@"box_name"]; 
     NSString *text=[NSString stringWithFormat:@"QR Code %ld with %@",indexPath.section+1,text1]; 

     cell.isSelected = [selectedQR containsObject:txtQRCodeid] ? YES : NO; 
     if (cell.isSelected) { 
      [cell.btnSelection setImage:[UIImage imageNamed:@"check"] ]; 
      // set image of selected 
     } 
     else{ 
      [cell.btnSelection setImage:[UIImage imageNamed:@"uncheck"] ]; 
      // set unselected image 
     } 
    cell.lblQRcodeText.text=text; 
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15]; 
     return cell; 
     } 

Это работа для меня

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