2016-07-11 4 views
2
#import "MasterTableViewController.h" 

@interface MasterTableViewController() 

@end 

@implementation MasterTableViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.navigationItem.rightBarButtonItem = self.editButtonItem; 
    [self.tableView setDelegate:self]; 
    [self.tableView setDataSource:self]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.tableView reloadData]; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self isEditing] ? self.wishListItems.count + 1 : self.wishListItems.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    WishListItem *item = self.wishListItems[indexPath.row]; 

    if (indexPath.row >= [self.wishListItems count] && self.tableView.isEditing) { 
     cell.textLabel.text = @"New subject"; 
     cell.imageView.image = nil; 
    } else { 
     cell.textLabel.text = item.name; 
     cell.imageView.image = item.photo; 
    } 
    return cell; 
} 

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 
    [super setEditing:editing animated:animated]; 

    if (editing) { 
     [self.tableView beginUpdates]; 
     [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.wishListItems.count inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic]; 
     [self.tableView endUpdates]; 
    } else { 
     [self.tableView beginUpdates]; 
     [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.wishListItems.count inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic]; 
     [self.tableView endUpdates]; 
    } 
} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [self.wishListItems removeObjectAtIndex:indexPath.row]; 
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
     [self.tableView reloadData]; 
    } else if (editingStyle == UITableViewCellEditingStyleInsert) { 
     WishListItem *newItem = [[WishListItem alloc] initWithName:@"New subject" photo:nil price:0.0 andNotes:@"Empty"]; 
     [self.wishListItems insertObject:newItem atIndex:indexPath.row]; 
     [tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
     [self.tableView reloadData]; 
    } 
} 

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row >= [self.wishListItems count]) { 
     return UITableViewCellEditingStyleInsert; 
    } else { 
     return UITableViewCellEditingStyleDelete; 
    } 
} 

//- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
// [self.tableView deselectRowAtIndexPath:indexPath animated:true]; 
// if (indexPath.row >= self.wishListItems.count && self.editing) { 
//  [self tableView:tableView commitEditingStyle:UITableViewCellEditingStyleInsert forRowAtIndexPath:indexPath]; 
// } 
//} 

#pragma mark - Navigation 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     WishListItem *item = self.wishListItems[indexPath.row]; 
     DetailViewController *detailViewController = (DetailViewController *)segue.destinationViewController; 
     detailViewController.item = item; 
    } 
} 


@end 

I "Anzahl von Zeilen in Abschnitt" verändert und neue Zeilen eingefügt, aber Ausgabe " Index 3 jenseits Grenzen [0 .. 2] ", und ich änderte" Nummer der Zeile im Abschnitt " ohne Inkrement, erscheinen Problem" Grund: 'versuchen, Zeile 3 in Abschnitt 0 einzufügen, aber es gibt nur 3 Zeilen in Abschnitt 0 nach dem Update' " Ich überprüfe tausend Mal und immer noch nicht das Problem finden, helfen, wer war in der Lage zu finden, was das Problem im Code ist.Ich habe eine Ausgabe "Index 3 über Grenzen [0 .. 2]‘ "

Antwort

1

In cellForRowAtIndexPath: greifen Sie auf Ihr Array zu, bevor Sie Ihre Grenzen überprüfen, damit es abstürzt, wenn Ihre Tabelle bearbeitet.

tun nur den Array-Zugriffs nach den Grenzen überprüfen:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    if (indexPath.row >= [self.wishListItems count] && self.tableView.isEditing) { 
     cell.textLabel.text = @"New subject"; 
     cell.imageView.image = nil; 
    } else { 
     WishListItem *item = self.wishListItems[indexPath.row]; 
     cell.textLabel.text = item.name; 
     cell.imageView.image = item.photo; 
    } 
    return cell; 
} 
Verwandte Themen