2013-08-18 70 views
2

我有一個排序的NSMutableArray其完美的作品和所有的,雖然當我嘗試刪除它崩潰的應用程序,然後,當我重新加載它沒有刪除右邊一個應用程序的對象。數組排序不刪什麼,我想

我知道,是由於這樣的事實,這是現在一個有序數組,因爲之前我實現了這個功能,它工作得很好,雖然我還沒有得到關於如何解決它的線索。

下面是我用從數組中刪除的東西代碼:

- (void) tableView:(UITableView *)tv commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     Patient *thisPatient = [patients objectAtIndex:indexPath.row]; 
     [patients removeObjectAtIndex:indexPath.row]; 
     if (patients.count == 0) { 
      [super setEditing:NO animated:YES]; 
      [self.tableView setEditing:NO animated:YES]; 
     } 
     [self deletePatientFromDatabase:thisPatient.patientid]; 
     [tv deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 
    } 
} 

它被停止在這一行:

[tv deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 

這裏是我用於排序的數組的代碼:

-(void) processForTableView:(NSMutableArray *)items { 

    for (Patient *thisPatient in items) { 
     NSString *firstCharacter = [thisPatient.patientName substringToIndex:1]; 
     if (![charIndex containsObject:firstCharacter]) { 
      [charIndex addObject:firstCharacter]; 
      [charCount setObject:[NSNumber numberWithInt:1] forKey:firstCharacter]; 
     } else { 
      [charCount setObject:[NSNumber numberWithInt:[[charCount objectForKey:firstCharacter] intValue] + 1] forKey:firstCharacter]; 
     } 
    } 
    charIndex = (NSMutableArray *) [charIndex sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 
} 
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"cell"]; 
     NSString *letter = [charIndex objectAtIndex:[indexPath section]]; 
     NSPredicate *search = [NSPredicate predicateWithFormat:@"patientName beginswith[cd] %@", letter]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"patientName" ascending:YES]; 

    NSArray *filteredArray = [[patients filteredArrayUsingPredicate:search] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
    if (nil == cell) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 

    NSLog(@"indexPath.row = %d, patients.count = %d", indexPath.row, patients.count); 
    Patient *thisPatient = [filteredArray objectAtIndex:[indexPath row]]; 
    cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", thisPatient.patientName, thisPatient.patientSurname]; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    cell.textLabel.textColor = [UIColor blackColor]; 
    if (self.editing) { 
     [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
    } 
    return cell; 
} 

我懷疑這是相當普遍的事情發生時,你排序數組雖然它可能不是。

如果你想要更多的代碼

回答

1

,因爲你的數組進行排序這不是neccessarily,而是因爲你是從填充表格中的數組是不一樣的,你要刪除從對象數組請說。

你在哪裏排序patients陣列?實際patients數組是排序還是你排序它在你的tableView委託方法,而不是實際排序patients

原因是您刪除的對象的索引與它在實際的patients數組中具有的索引不同(因爲一個是排序的而另一個不是)。因此,它首先刪除錯誤的對象,然後崩潰,因爲tableView希望刪除一個對象(這樣它就可以動畫化該被刪除的單元格),但是刪除了錯誤的對象。

+0

你想要排序代碼嗎? – Hive7

+0

你可以發佈你的tableView委託方法嗎?和你正在分類的代碼? – Jsdodgers

+0

我該如何使它工作? – Hive7

相關問題