我尝试过所有可搜索的解决方案都无济于事。我目前的删除代码如下:
[self.conversationsTableView beginUpdates];
[_conversations removeObjectAtIndex:[indexPath row]];
if ([self.conversationsTableView numberOfRowsInSection:indexPath.section] == 1) {
[self.conversationsTableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationAutomatic];
} else {
[self.conversationsTableView deleteRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];
}
[self.conversationsTableView endUpdates];
正如您所看到的,我正在删除部分/行之前正在删除_conversations中的数据源 - 如果它是最后一部分,我也会删除该部分。
我仍然遇到了崩溃:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'UITableView内部错误:无法生成具有旧部分计数的新部分地图:1和新部分计数:0'
我没有想法,除非我做了一个真正的hacky解决方案,我在实际内容之上插入了一个看不见的部分,我真的不想这样做。非常感谢任何帮助。
这是我的numberOfSectionsInTableView的样子:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
非常奇怪的更新:我试图通过在删除旧版本时插入空白部分来解决这个问题。但由于一些无法解释的原因,我仍然得到错误。该错误表明,即使我已将代码更改为以下内容,tableview的新部分计数为0:
if ([self.conversationsTableView numberOfRowsInSection:indexPath.row] == 1) {
[self.conversationsTableView deleteSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.conversationsTableView insertSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
} else {
[self.conversationsTableView deleteRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];
}
完全不知道为什么会发生这种情况......
堆栈追踪:
NSInternalInconsistencyException', reason: 'UITableView internal bug: unable to generate a new section map with old section count: 1 and new section count: 0'
*** First throw call stack:
(
0 CoreFoundation 0x000000010b6bee65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010b137deb objc_exception_throw + 48
2 CoreFoundation 0x000000010b6becca +[NSException raise:format:arguments:] + 106
3 Foundation 0x000000010ad844de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
4 UIKit 0x0000000109bef679 -[_UITableViewUpdateSupport(Private) _computeSectionUpdates] + 2858
5 UIKit 0x0000000109c00059 -[_UITableViewUpdateSupport initWithTableView:updateItems:oldRowData:newRowData:oldRowRange:newRowRange:context:] + 435
6 UIKit 0x00000001098cf912 -[UITableView _endCellAnimationsWithContext:] + 12936
7 WontBuyIOS 0x000000010819dea8 -[WOBMessagesViewController queryControllerDidChangeContent:] + 88
8 LayerKit 0x0000000108db4ca6 __65-[LYRQueryController updateWithObjectIdentifiers:changedObjects:]_block_invoke154 + 74
9 libdispatch.dylib 0x000000010c05249b _dispatch_client_callout + 8
10 libdispatch.dylib 0x000000010c03bc3c _dispatch_barrier_sync_f_slow_invoke + 284
11 libdispatch.dylib 0x000000010c05249b _dispatch_client_callout + 8
12 libdispatch.dylib 0x000000010c03a2af _dispatch_main_queue_callback_4CF + 1738
13 CoreFoundation 0x000000010b61ed09 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
14 CoreFoundation 0x000000010b5e02c9 __CFRunLoopRun + 2073
15 CoreFoundation 0x000000010b5df828 CFRunLoopRunSpecific + 488
16 GraphicsServices 0x000000010e33cad2 GSEventRunModal + 161
17 UIKit 0x00000001097a4610 UIApplicationMain + 171
18 WontBuyIOS 0x00000001081a6bcf main + 111
19 libdyld.dylib 0x000000010c08692d start + 1
20 ??? 0x0000000000000001 0x0 + 1
)
插入/删除代码:
- (void)queryController:(LYRQueryController *)controller
didChangeObject:(id)object
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(LYRQueryControllerChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
switch (type) {
case LYRQueryControllerChangeTypeInsert: {
[_conversations addObject:object];
[self.conversationsTableView insertRowsAtIndexPaths:@[ newIndexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];
}
break;
case LYRQueryControllerChangeTypeDelete: {
[_conversations removeObjectAtIndex:indexPath.row];
if ([self.conversationsTableView numberOfRowsInSection:indexPath.row] == 1) {
[self.conversationsTableView deleteSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.conversationsTableView insertSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
} else {
[self.conversationsTableView deleteRowsAtIndexPaths:@[ indexPath ] withRowAnimation:UITableViewRowAnimationAutomatic];
}
break;
}
default:
break;
}
}
答案 0 :(得分:0)
numberOfRowsInSection
来电_conversations.count
。删除数据源数组中的项后,它返回错误的值。与0
而不是1
beginUpdates / endUpdates
。
答案 1 :(得分:0)
我的事情@rmaddy是对的,您应该更新numberOfSections
数据源并返回1个以下的部分。
您是否尝试过调用[tableView reloadData]
。
答案 2 :(得分:0)
看起来调用_conversations.count
会产生副作用。请在if
条件下使用CREATE PROCEDURE DBNAME.getStatistics (OUT A BIGINT UNSIGNED, OUT B BIGINT UNSIGNED, OUT C BIGINT UNSIGNED)
BEGIN
SELECT count(*) into A from DBNAME.Table1 where id =0;
SELECT count(*) into B from DBNAME.Table2 where id>0 and id<4;
SELECT count(*) into C from DBNAME.Table3 where id>4;
END
。这应该可以解决你的第一个原始问题。
答案 3 :(得分:0)
您正在调用setupterm
并传入indexPath.row。这是不正确的,应该是[self.conversationsTableView numberOfRowsInSection:indexPath.row]
。
答案 4 :(得分:0)
这最终是另一个使用queryController的视图控制器的问题。通过确保正确删除行来修复该视图控制器之后,错误就消失了。