2012-03-30 14 views
0

Ich habe diesen Code für ein UITableView mit zwei Spalten, die ich online gefunden habe. Es funktioniert gut, wenn ich ihm eine weitere Zeile hinzufüge, aber wenn ich eine Zeile zum Löschen auswählen, lösche ich stattdessen die letzte Zeile. Ich füge nur Zeilen mit [NSMutableArray addObject:] am Ende des Arrays hinzu, aber wenn ich eine Zeile lösche, wähle ich die Zeile, die zuerst entfernt werden soll.UITableView reloadData wird nach dem Löschen der Zeile nicht korrekt angezeigt

hier ist die Zeilenauswahl ------ (überprüfte ich sicher tableViewIdx richtig war zu machen)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    tableViewIdx = [indexPath row]; 
} 

dann die Schaltfläche Löschen ------ (ich sicher, das Objekt zu machen geprüft tatsächlich wurde aus dem Array entfernt)

-(IBAction)bt_DeletePressed:(id)sender{ 
    [mutableArray removeObjectAtIndex:tableViewIdx]; 
    //delete actual content 
    for(int i = VStableViewIdx;i<10;i++){ 
     g_vitals[i] = g_vitals[i+1]; 
    } 
    [TableView reloadData]; 
    tableViewIdx--; 
} 

und einige der Tableview Code

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    int count = [listData count]; 
    if(self.editing) count++; 
    tableSize = count; 
    return count; 
} 

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

    NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row]; 

    MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil){ 
     cell = [[[MyTableCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease]; 

     NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
     [formatter setDateFormat:@"HH:mm"]; 

     UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0, 60.00,tableView.rowHeight)] autorelease]; 
     [cell addColumn:60]; 
     label.font = [UIFont systemFontOfSize:12.0]; 
     label.text = textView.text; 
     [formatter release]; 
     label.textAlignment = UITextAlignmentRight; 
     label.textColor = [UIColor blueColor]; 
     label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
     UIViewAutoresizingFlexibleHeight; 
     [cell.contentView addSubview:label]; 

     label = [[[UILabel alloc] initWithFrame:CGRectMake(70.0, 0, 60.0,tableView.rowHeight)] autorelease]; 
     [cell addColumn:500]; 
     label.font = [UIFont systemFontOfSize:12.0]; 
     label.text = [NSString stringWithFormat:@"%d",respRateTemp]; 
     label.textAlignment = UITextAlignmentRight; 
     label.textColor = [UIColor blueColor]; 
     label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | 
     UIViewAutoresizingFlexibleHeight; 
     [cell.contentView addSubview:label]; 
    } 

    return cell; 
} 

Irgendwelche Ideen, warum es wou Entferne ich die letzte Zeile statt der ausgewählten Zeile?

EDIT: Ich konnte es tatsächlich selbst reparieren, indem ich deleteRowsAtIndexPaths benutze: anstelle von updateData, aber jetzt habe ich ein anderes Problem. Mein Programm läuft auf dem Simulator gut, stürzt aber häufig auf einem Gerät ab. Es kommt mit dem Fehler:

Programm empfangenen Signal: "EXC_BAD_ACCESS".

Datenformatierer vorübergehend nicht verfügbar, wird nach einem 'weiter' versuchen. (Die Funktion dlopen kann nicht gefunden werden, daher ist es nicht möglich, gemeinsam genutzte Bibliotheken zu laden.)

Antwort

0

Es gibt ein Problem mit dem Delegaten "cellForRowAtIndexPath". Entsprechend Ihrer Logik Tabellenansicht dequeueReusingCells mit Indexnummern, die das Fehlen der letzten Zeile statt der ausgewählten Zeile zu löschen verursacht. Möglicherweise können Sie die Logik in CellForRowAtIndexPath ändern oder Sie können eine geeignete Datenstruktur & Algorithmen verwenden, um die Tabellenansicht zu verwalten.

Verwandte Themen