내 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;
}
단일 편집 "세션"에서 행 이후에 행을 추가 할 수 있도록이 문제를 어떻게 해결할 수 있습니까?
나는 그것을 줄 것이다. 그 점을 지적 해 주셔서 감사합니다. – Jace
그것은 불행하게도 효과가 없습니다. 동일한 오류가 발생하고 응용 프로그램이 중단되거나 종료됩니다. – Jace