2016-09-17 62 views
0

我有此故障。嘗試向第0部分插入行0,但更新後0部分只有0行

我已經嘗試了一切。我在谷歌搜索了3天,以瞭解爲什麼我的應用崩潰了,而且我沒有找到任何東西。 我發現了很多類似的帖子,試圖用一些在這裏和那裏,但仍然崩潰。

終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,理由是:「試圖插入一行0到段0,但只有0在更新後一節0行」
第一擲調用堆棧:

我.m文件:

#import "PlayersViewController.h" 
#import "Player.h" 
#import "PlayerCell.h" 

@interface PlayersViewController() 
@end 

@implementation PlayersViewController 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark - Table view data source 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    PlayerCell *cell = (PlayerCell *)[tableView 
             dequeueReusableCellWithIdentifier:@"PlayerCell"]; 
    Player *player = [self.players objectAtIndex:indexPath.row]; 
    cell.nameLabel.text = player.name; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     [self.players removeObjectAtIndex:indexPath.row]; 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 

- (void)playerDetailsViewControllerDidCancel: 
    (PlayerDetailsViewController *)controller 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

- (void)playerDetailsViewControllerDidSave: 
    (PlayerDetailsViewController *)controller 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     UINavigationController *navigationController = 
     segue.destinationViewController; 
     PlayerDetailsViewController 
     *playerDetailsViewController = 
     [[navigationController viewControllers] 
     objectAtIndex:0]; 
     playerDetailsViewController.delegate = self; 
    } 
} 

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.players count]; 
} 

- (void)playerDetailsViewController: 
(PlayerDetailsViewController *)controller 
         didAddPlayer:(Player *)player 
{ 
    [self.players addObject:player]; 

    [NSThread sleepForTimeInterval:0.5]; 

    [self.tableView beginUpdates]; 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    [self.tableView endUpdates]; 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

@end 

我希望你能幫忙。

回答

0

在beginUpdates和endUpdates之間,您必須以匹配的方式修改tableview和數據源。你不這樣做。你只修改tableview。

我建議學習和使用Objective-C數組語法和Objective-C文字。 「[self.players objectAtIndex:indexPath.row]」變爲「self.players [indexPath.row]」和「[NSArray arrayWithObject:indexPath]」變爲「@ [indexPath]」。

+0

你能告訴我怎麼做嗎? – user1071269

+0

這是基本的編程。我向你展示了這個bug,你可以自己修復它。認真。 – gnasher729

+0

是的,謝謝你,但我卡住了:s – user1071269

3

你從故事板給單元格標識符給PlayerCell嗎?在.m文件中定義viewDidLoad方法。

我的.h文件添加表視圖的委託和數據源,就像UITableViewDataSource和UITableViewDlegate。

後,在您的.m文件,並在viewDidLoad方法添加,

self.tableView.delegate = self; 
[self.tableView setDataSource : self]; 

這可以幫助你。

您可以登錄玩家陣列,看看它不是零。 爲了您的播放器方法和邏輯製作新的模型文件並在其中寫入播放器邏輯並將其導入到您的表格視圖中。

+0

它仍然崩潰 – user1071269

+0

嘗試刪除開始更新和結束更新,然後再次運行應用程序。 @ user1071269 – KAR

+0

我試過了,仍然是同樣的錯誤。當你調用這個方法時, – user1071269

相關問題