2012-10-16 4 views
0

내 tableview는 내부 편집 및 추가 기능을 사용합니다. 편집 버튼을 누르면이 새로운 행을 편집하고 커밋 할 수있는 새로운 행이 추가됩니다. 새 행을 tableview로 커밋 할 때 새 행이 추가되고 빈 셀이 아래로 이동하여 나중에 편집 할 수 있고 다른 행이 다시 추가됩니다.In-place UITableView edtiting : 행 크래시 추가

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:] 
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'attempt to insert row 2 into section 0, but there are only 2 rows in section 0 after the update' 
나는 단지 하나의 행을 추가 할 때 전에하지만 내부 편집에 튜토리얼을 수행 한 후에도이 오류를 얻고 있었다

나는 내가 가진 생각 : 같은 편집 세션 동안 다른 행을 추가하려고하지만 때 오류가 발생합니다 해결 됐어. 다음과 같은 몇 가지 관련 방법이 있습니다.

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



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

    int count = [items count]; 
    if(self.editing)count++; 
    return count; 

} 



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

    [keyphraseTextField setEnabled:YES]; 

    NSArray *paths = [NSArray arrayWithObject: 
         [NSIndexPath indexPathForRow:[items count] inSection:0]]; 
    if (editing) 
    { 
     [[self tableView] insertRowsAtIndexPaths:paths 
           withRowAnimation:UITableViewRowAnimationTop]; 
    } 
    else { 
     [[self tableView] deleteRowsAtIndexPaths:paths 
           withRowAnimation:UITableViewRowAnimationTop]; 
    } 
} 



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

    if (editingStyle == UITableViewCellEditingStyleDelete) { 

     [self deleteItemAtIndexPath:indexPath]; 

     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

    } 

    else if (editingStyle == UITableViewCellEditingStyleInsert) { 

     NSIndexPath *thePath = [NSIndexPath indexPathForRow:[items count] inSection:0]; 

     DBAccess *dbaccess = [[DBAccess alloc] init]; 

     NSInteger keyphraseCount = [dbaccess getDomainKeyphraseCount:domain_id]; 
     NSInteger keyphraseCountLimit = [dbaccess getDomainKeyphraseCountLimit:domain_id]; 

     [dbaccess closeDatabase]; 

     [dbaccess release]; 

     if(![keyphraseTextField.text isEqualToString:@""] && keyphraseCount<keyphraseCountLimit){ 

      [self insertItemAtIndexPath:thePath]; 

      [self readItems]; 

      [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:thePath] withRowAnimation:UITableViewRowAnimationLeft]; 

      [self makeNSURLConnection]; 

     }else{ 

      if([keyphraseTextField.text isEqualToString:@""]){ 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Please insert Keyphrase." delegate:self cancelButtonTitle:@"Not Now." otherButtonTitles:@"Upgrade!", nil]; 
       [alert setTag:10]; 
       [alert show]; 
       [alert release]; 
      } 
      if(keyphraseCount>=keyphraseCountLimit){ 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Kindly upgrade your subscription to add more keyphrases!" delegate:self cancelButtonTitle:@"Not Now." otherButtonTitles:@"Upgrade!", nil]; 
       [alert setTag:10]; 
       [alert show]; 
       [alert release]; 
      } 

     } 

    } 

} 



- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (self.editing == NO || !indexPath) return UITableViewCellEditingStyleNone; 

    if (self.editing && indexPath.row == ([items count])) { 

     return UITableViewCellEditingStyleInsert; 

    } else { 

     return UITableViewCellEditingStyleDelete; 

    } 

    return UITableViewCellEditingStyleNone; 

} 

단일 편집 "세션"에서 행 이후에 행을 추가 할 수 있도록이 문제를 어떻게 해결할 수 있습니까?

답변

0

사이/선택 라인을 삭제/삽입을 배치해야 최신 정보. 그것은 내가 코딩하는 것을 좋아하지는 않지만 작동하지만 잘못된 일을 해결할 수는 없습니다.

0

당신은 내가 많이 변경하고 각 후 변경된 tablview의 행 번호를 수동으로 카운트를 추가했다 결국 [self.tableview beginUpdates];[self.tableview endUpdates];

+0

나는 그것을 줄 것이다. 그 점을 지적 해 주셔서 감사합니다. – Jace

+0

그것은 불행하게도 효과가 없습니다. 동일한 오류가 발생하고 응용 프로그램이 중단되거나 종료됩니다. – Jace