2016-10-26 2 views
0

So habe ich in meiner Tabellenansicht ein Array namens DataArray und es erhält seine Objekte von einem Server mit JSON. Ich habe jeder Zelle eine Schaltfläche hinzugefügt, und wenn die Schaltfläche angeklickt wird, sollte die Zelle in einen anderen Abschnitt/oder ein anderes Array mit dem Namen "FollowedArray" verschoben werden, um genauer zu sein. Jetzt werden die Zellen in den anderen Bereich übertragen, aber nach dem Verschieben von 6 Zellen bekomme ich einen Fehler, der das sagt. Alle Arrays sind NSMutableArray. Außerdem bin ich neu in iOS, also versuche, mit mir zu arbeiten, danke.Fehler in der Tabellenansicht, wenn Zellen Abschnitte wechseln

2016-10-26 17: 27: 19,569 CustomCellApp [3212: 198103] * app aufgrund abgefangene Ausnahme 'NSRangeException', Grund Ende: ‚* - [__ NSArrayM objectAtIndex]: Index 6 über Grenzen [0 .. 4]‘

---------------------

Randnotiz, kann ich eine separate Fehler Post machen aber ich habe ein anderes Problem, die Bilder, die in den Zellen angezeigt werden, werden zu anderen Bildern geändert, wenn Sie Abschnitte mit dem Pod SDWebImag wechseln e.

---------------------

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

if (!isFiltered) { 

    if (section == 0) { 
     return [followedArray count]; 
    } 
    else if (section == 1) { 
     return [dataArray count]; 
    } 
} 
return [filteredArray count]; 

} 

--------------- ------

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
if (section == 0) { 
    return @"Followed Data"; 
} 
else { 
    return @"All Data"; 
} 
} 

---------------------

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

static NSString *CellIdentifier = @"Cell"; 
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (!cell) { 
    cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

// Configuring the cell 
Data * dataObject; 
if (!isFiltered) { 

    if (indexPath.section == 0) { 
     dataObject = [followedArray objectAtIndex:indexPath.row]; 
    } 
    else if (indexPath.section == 1) { 
     dataObject = [dataArray objectAtIndex:indexPath.row]; 
    } 
} 
else { 
    dataObject = [filteredArray objectAtIndex:indexPath.row]; 
} 

// Loading Images 
if (!isFiltered) { 
    // Exception Breakpoint Here 
    NSURL * imgURL = [[dataArray objectAtIndex:indexPath.row] valueForKey:@"dataURL"]; 
    [cell.myImageView setContentMode:UIViewContentModeScaleAspectFit]; 
    [cell.myImageView sd_setImageWithURL:imgURL placeholderImage:[UIImage imageNamed:@"no-image.png"] options:SDWebImageRefreshCached]; 
}else{ 
    NSURL * imgURL = [[filteredArray objectAtIndex:indexPath.row] valueForKey:@"dataURL"]; 
    [cell.myImageView setContentMode:UIViewContentModeScaleAspectFit]; 
    [cell.myImageView sd_setImageWithURL:imgURL placeholderImage:[UIImage imageNamed:@"no-image.png"] options:SDWebImageRefreshCached]; 
} 

// Loading Follow Button 
cell.followButton.tag = indexPath.row; 
[cell.followButton addTarget:self action:@selector(followButtonClick:) forControlEvents:UIControlEventTouchUpInside]; 
cell.followButton.hidden = NO; 

return cell; 
} 

---------------------

-(void)followButtonClick:(UIButton *)sender { 

// Adding row to tag 
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.myTableView]; 
NSIndexPath *indexPath = [self.myTableView indexPathForRowAtPoint:buttonPosition]; 

// Creating an action per tag 
if (indexPath != nil) 
{ 

    // Change Follow to Following 
    [sender setImage:[UIImage imageNamed:@"follow.png"] forState:UIControlStateNormal]; 
    cell.followButton.hidden = YES; 
    cell.followedButton.hidden = NO; 


    // ----- ERROR BEGINS HERE ----- // 
    [self.myTableView beginUpdates]; 

    // ----- Inserting Cell to Section 0 ----- *CAUSING PROBLEMS* 
     // Exception Breakpoint Here 
    [followedArray addObject:[dataArray objectAtIndex:indexPath.row]]; 
    [myTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:followedArray.count-1 inSection:0]] withRowAnimation:UITableViewRowAnimationFade]; 

    NSLog(@"indexPath.row = %ld", (long)indexPath.row); 

    // ----- Removing Cell from Section 1 ----- *WORKING* 
    [dataArray removeObjectAtIndex:indexPath.row]; 
    NSInteger rowToRemove = indexPath.row; 
    [self.myTableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObjects:[NSIndexPath indexPathForRow:rowToRemove inSection:1], nil] withRowAnimation:YES]; 

    NSLog(@"Array =%@",followedArray); 

    [self.myTableView endUpdates]; 
    // ----- ERROR ENDS HERE ----- // 
} 
} 

------------------ ---

+0

, warum Sie die Position des Benutzers klicken Sie sind um die Zelle zu bekommen, tatsächlich die Zellen in Tableview wiederverwendet werden, so dass, wenn i geklickt auf Zelle Nummer 4 vielleicht ist es die gleiche Position für Zelle Nummer 8, also was Sie erwarten, dass der indexPath sein? Sie müssen die Schaltfläche Aktion in der Zelle selbst implementieren und Delegat machen, wenn er auf die Schaltfläche geklickt hat, um den richtigen Indexpfad zu erhalten –

+0

@AliOmari Ist das, was den Fehler verursachen kann? Was soll ich tun, um es zu beheben? – BroSimple

+0

Vielleicht ist das nicht der Grund, aber Sie tun es falsch. also lassen Sie uns das zuerst beheben und mit dem nächsten Schritt fortfahren. Sie müssen die Aktion der Schaltfläche in der Zelle addieren und die View-Controller als Delegierter für diese Zelle übergeben, so dass Sie die View-Controller aufrufen können, wenn die Taste gedrückt wird. –

Antwort

0

Das hat mir geholfen, die Fehler zu beheben, die ich hatte. Dank an @AliOmari, dass sie mir geholfen haben.

In cellForRowAtIndexPath

// Configuring the cell 
Data * dataObject; 
if (!isFiltered) { 

    if (indexPath.section == 0) { 
     dataObject = [followedArray objectAtIndex:indexPath.row]; 
     [cell populateCell:dataObject isFollowed:YES indexPath:indexPath parentView:self]; 
    } 
    else if (indexPath.section == 1) { 
     dataObject = [dataArray objectAtIndex:indexPath.row]; 
     [cell populateCell:dataObject isFollowed:NO indexPath:indexPath parentView:self]; 
    } 
} 
else { 
    dataObject = [filteredArray objectAtIndex:indexPath.row]; 
    [cell populateCell:dataObject isFollowed:NO indexPath:indexPath parentView:self]; 
} 
return cell; 

Inside my Knopf

[self.myTableView beginUpdates]; 

    // ----- Inserting Cell to Section 0 ----- 
    [followedArray insertObject:[dataArray objectAtIndex:indexPath.row] atIndex:0]; 
    [myTableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade]; 
    //NSLog(@"indexPath.row = %ld", (long)indexPath.row); 

    // ----- Removing Cell from Section 1 ----- 
    [dataArray removeObjectAtIndex:indexPath.row]; 
    NSInteger rowToRemove = indexPath.row; 
    [self.myTableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObjects:[NSIndexPath indexPathForRow:rowToRemove inSection:1], nil] withRowAnimation:YES]; 
    //NSLog(@"Array =%@",followedArray); 

    [self.myTableView endUpdates]; 
Verwandte Themen