私のアプリでは、NSNotificationCenter
を使用して10個のユーザーオブジェクトをバッチで返しています。 10個のオブジェクトを取得すると、そのデータをテーブルビューに挿入します。私は私のアプリがクラッシュした&次のエラーを取得する私のアプリを実行する場合は、このために私は次のコード'NSInternalInconsistencyException' iuitableview iphoneで行を挿入中
- (void)viewDidAppear:(BOOL)animated {
recordCounter = 0;
noOfRowsCounter = 0;
// Some code
}
- (void) gotNotification: (NSNotification *) notification {
NSMutableArray *tempArray = [[notification userInfo]valueForKey:KEY];
NSLog(@"recordCounter BEFORE=> %d",recordCounter);
NSLog(@"noOfRowsCounter BEFORE=> %d",noOfRowsCounter);
self.insertIndexPaths = [[NSMutableArray alloc] init];
for (User *user in tempArray)
{
[self.contactsArray addObject:user];
recordCounter++;
}
for (noOfRowsCounter = noOfRowsCounter; noOfRowsCounter < recordCounter; noOfRowsCounter++) {
[self.insertIndexPaths addObject:[NSIndexPath indexPathForRow:recordCounter inSection:0]];
}
NSLog(@"recordCounter AFTER=> %d",recordCounter);
NSLog(@"noOfRowsCounter AFTER=> %d",noOfRowsCounter);
NSLog(@"self.insertIndexPaths count=> %d",[self.insertIndexPaths count]);
[contactsTableView beginUpdates];
[contactsTableView insertRowsAtIndexPaths:self.insertIndexPaths
withRowAnimation:UITableViewRowAnimationNone];
[contactsTableView endUpdates];
[self.insertIndexPaths removeAllObjects];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// I am doing this as I have 2 records in single row
if ([self.insertIndexPaths count]%2 == 0) {
NSLog(@"In IF::rows:: %d",[self.insertIndexPaths count]/2);
return [self.insertIndexPaths count]/2;
}
else {
NSLog(@"In ELSE::rows:: %d",[self.insertIndexPaths count]/2+1);
return [self.insertIndexPaths count]/2 + 1;
}
}
を使用しています。ここに私のコンソールログがあります
2012-04-04 12:15:36.559 AppName[1742:6803] recordCounter BEFORE=> 0
2012-04-04 12:15:36.563 AppName[1742:6803] noOfRowsCounter BEFORE=> 0
2012-04-04 12:15:38.539 AppName[1742:6803] recordCounter AFTER=> 10
2012-04-04 12:15:38.543 AppName[1742:6803] noOfRowsCounter AFTER=> 10
2012-04-04 12:15:38.546 AppName[1742:6803] self.insertIndexPaths count=> 10
2012-04-04 12:15:42.971 AppName[1742:6803] In IF::rows:: 5
2012-04-04 12:15:44.292 AppName[1742:6803] *** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-1448.89/UITableView.m:995
2012-04-04 12:15:44.306 AppName[1742:6803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (5) must be equal to the number of rows contained in that section before the update (0), plus or minus the number of rows inserted or deleted from that section (10 inserted, 0 deleted).'
*** Call stack at first throw:
(
0 CoreFoundation 0x36c4164f __exceptionPreprocess + 114
1 libobjc.A.dylib 0x332fec5d objc_exception_throw + 24
2 CoreFoundation 0x36c41491 +[NSException raise:format:arguments:] + 68
3 Foundation 0x334ec573 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 62
4 UIKit 0x30ca4379 -[UITableView(_UITableViewPrivate) _endCellAnimationsWithContext:] + 4500
5 UIKit 0x30cae2f9 -[UITableView endUpdatesWithContext:] + 28
6 UIKit 0x30cae2d5 -[UITableView endUpdates] + 16
7 AppName 0x00004927 -[AppNameViewController batchNotification:] + 770
8 Foundation 0x334a4183 _nsnote_callback + 142
9 CoreFoundation 0x36c1020f __CFXNotificationPost_old + 402
10 CoreFoundation 0x36baaeeb _CFXNotificationPostNotification + 118
11 Foundation 0x334a15d3 -[NSNotificationCenter postNotificationName:object:userInfo:] + 70
12 AppName 0x00007705 -[AddressBook getAddressBookData] + 1700
13 AppName 0x0000447b -[AppNameViewController retriveAddressBookData] + 102
14 Foundation 0x334b3389 -[NSThread main] + 44
15 Foundation 0x335255cd __NSThread__main__ + 972
16 libsystem_c.dylib 0x350c0311 _pthread_start + 248
17 libsystem_c.dylib 0x350c1bbc start_wqthread + 0
)
terminate called after throwing an instance of 'NSException'
これらのレコードをテーブルビューに追加したいと思います。これどうやってするの。おかげ
はUPDATE:cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
ContactCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
NSArray *cellArray=[[NSBundle mainBundle] loadNibNamed:@"ContactCell" owner:self options:nil];
//NSLog(@"cellArray count => %d",[cellArray count]);
cell=[cellArray objectAtIndex:0];
}
// Configure the cell...
// For showing 2 records in single row
int row = indexPath.row * 2;
if (row <= [self.contactsArray count])
{
User *user = [self.contactsArray objectAtIndex:row];
NSLog(@"In ROW: %@",user.firstName);
cell.firstNameLabel.text=[NSString stringWithFormat:@"%@",nameString];
}
if ((row + 1) < [self.contactsArray count])
{
User *user = [self.contactsArray objectAtIndex:row+1];
NSLog(@"In ROW+1: %@",user.firstName);
cell.secondNameLabel.text=[NSString stringWithFormat:@"%@",nameString];
}
return cell;
}
forループでエラーが発生しました:: for(presentrows; presentrows
iOSAppDev
今はクラッシュしていませんが、その度にself.insertIndexPaths count => 0と表示されます – iOSAppDev
編集された回答を参照 –