2016-10-24 3 views
0

Ich kämpfe von den letzten 2 Stunden. Warum die letzte Zeile nicht aus meiner Tabellenansicht gelöscht wird. Eine Zeile bleibt nur in der Tabellenansicht, die nicht entfernt wird. Obwohl ich das Objekt aus dem Array entfernt habe und nichts im Array ist.Problem und Absturz nach dem Löschen der letzten Zeile

Was ist ein Problem im Code?

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 

     Geofencing *getObject = [routesArray objectAtIndex:indexPath.row]; 
     [getObject deleteGeofencingFormDatabase:getObject.ah_routeid]; 

     [routesArray removeObjectAtIndex:indexPath.row]; 

     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1*NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 


      [routeTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
      [self displayEmptyRouteAlert]; 

     }); 
    } 
} 

UPDATE 1:

-(void)displayEmptyRouteAlert 
{ 
    routesArray = [[Geofencing sharedInstance] fetchGeofencingFromDatabase]; 

if(routesArray.count > 0){ 
    [routeTableView reloadData]; 
} 
else{ 

    NSString *messageStr = @"Let's start by creating new route."; 
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"No route found" 
                    message:messageStr 
                  preferredStyle:UIAlertControllerStyleAlert]; 


    UIAlertAction *buttonAdd = [UIAlertAction actionWithTitle:@"Add New Route" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { 
     [self openToAddNewRoute]; 
    }]; 
    [alert addAction:buttonAdd]; 



    UIAlertAction *buttoncancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { 
    }]; 
    [alert addAction:buttoncancel]; 

    [self presentViewController:alert animated:YES completion:nil]; 
}} 
+0

tun neu laden Sie Tableview nach löschen? – Sofeda

+0

Warum aktualisieren Sie Ihre 'tableView' nach einer Sekunde? Haben Sie versucht, die Anweisung "dispatch_after" zu entfernen? – Astoria

+0

@SMi ja, ich habe versucht, mit Tabelle wieder zu laden – Ketan

Antwort

0

ich die Lösung herauszufinden, die für mich arbeiten. Das Problem war woanders und hat auch die commitEditingStyle: etwas modifiziert.

routeTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 80, self.view.bounds.size.width, self.view.bounds.size.height-160)]; 
routeTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
routeTableView.dataSource = self; 
routeTableView.delegate = self; 
routeTableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
routeTableView.allowsMultipleSelectionDuringEditing = NO; 
[self.view addSubview:routeTableView]; 

Zum einen bewegen i den obigen Code in viewDidLoad - Methode, früher war es in viewWillAppear geschrieben. Als ich verändert haben, in

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
    Geofencing *getObject = [routesArray objectAtIndex:indexPath.row]; 
    [routesArray removeObjectAtIndex:indexPath.row]; 
    [deleteArray addObject:getObject]; //deleteArray collecting the object which will removed in viewDidDisappear 
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [routeTableView reloadData]; 
    }); 
    } 
} 

Und schließlich

- (void)viewDidDisappear:(BOOL)animated 
    { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    for (Geofencing *getObject in deleteArray) { 
     [getObject deleteGeofencingFormDatabase:getObject.ah_routeid]; 
     [routeTableView reloadData]; 
    } 
    [deleteArray removeAllObjects]; 
    }); 
} 
+0

Der Teil zum Nachladen von Daten wurde in der Tabellenansicht vom Löschen der Datenbank getrennt. – Ketan

Verwandte Themen