- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到一个问题,在重新排序 UITableViewCells 时,tableView 不随单元格滚动。仅出现一个空白行,任何后续滚动都会出现数组越界错误,堆栈跟踪中没有我的任何代码。 Here is a quick video of the problem.
相关代码如下:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return indexPath.section == 1;
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
BOOL ret = indexPath.section == 1 && indexPath.row < self.count;
DebugLog(@"canMoveRowAtIndexPath: %d:%d %@", indexPath.section, indexPath.row, (ret ? @"YES" : @"NO"));
return ret;
}
- (void)delayedUpdateCellBackgroundPositionsForTableView:(UITableView *)tableView {
[self performSelectorOnMainThread:@selector(updateCellBackgroundPositionsForTableView:) withObject:tableView waitUntilDone:NO];
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
if (fromIndexPath.row == toIndexPath.row) return;
DebugLog(@"Moved audio from %d:%d to %d:%d", fromIndexPath.section, fromIndexPath.row, toIndexPath.section, toIndexPath.row);
NSMutableArray *audio = [self.items objectAtIndex:fromIndexPath.section];
[audio exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
[self performSelector:@selector(delayedUpdateCellBackgroundPositionsForTableView:) withObject:tableView afterDelay:kDefaultAnimationDuration/3];
}
这是生成的崩溃堆栈跟踪:
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Application Specific Information:
iPhone Simulator 3.2 (193.3), iPhone OS 3.0 (7A341)
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFArray removeObjectsInRange:]: index (6) beyond bounds (6)'
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 CoreFoundation 0x302ac924 ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___ + 4
1 libobjc.A.dylib 0x93cb2509 objc_exception_throw + 56
2 CoreFoundation 0x3028e5fb +[NSException raise:format:arguments:] + 155
3 CoreFoundation 0x3028e55a +[NSException raise:format:] + 58
4 Foundation 0x305684e9 _NSArrayRaiseBoundException + 121
5 Foundation 0x30553a6e -[NSCFArray removeObjectsInRange:] + 142
6 UIKit 0x30950105 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow] + 862
7 UIKit 0x30947715 -[UITableView layoutSubviews] + 250
8 QuartzCore 0x0090bd94 -[CALayer layoutSublayers] + 78
9 QuartzCore 0x0090bb55 CALayerLayoutIfNeeded + 229
10 QuartzCore 0x0090b3ae CA::Context::commit_transaction(CA::Transaction*) + 302
11 QuartzCore 0x0090b022 CA::Transaction::commit() + 292
12 QuartzCore 0x009132e0 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 84
13 CoreFoundation 0x30245c32 __CFRunLoopDoObservers + 594
14 CoreFoundation 0x3024503f CFRunLoopRunSpecific + 2575
15 CoreFoundation 0x30244628 CFRunLoopRunInMode + 88
16 GraphicsServices 0x32044c31 GSEventRunModal + 217
17 GraphicsServices 0x32044cf6 GSEventRun + 115
18 UIKit 0x309021ee UIApplicationMain + 1157
19 XXXXXXXX 0x0000278a main + 104 (main.m:12)
20 XXXXXXXX 0x000026f6 start + 54
注意,数组越界长度不是我的元素的长度(我有 9 个),但总是更小的值。
我已经尝试解决这个问题很多
小时
天了,但没有成功……有什么想法吗?
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewCellEditingStyleNone;
}
- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath {
int count = [(UAPlaylistEditDataSource *)self.dataSource count];
if (proposedDestinationIndexPath.section == 0) {
return [NSIndexPath indexPathForRow:0 inSection:sourceIndexPath.section];
}else if (proposedDestinationIndexPath.row >= count) {
return [NSIndexPath indexPathForRow:count-1 inSection:sourceIndexPath.section];
}
return proposedDestinationIndexPath;
}
…就是这样。我正在使用 Three20 框架,到目前为止我还没有遇到任何重新排序问题。问题也不在 updateCellBackgroundPositionsForTableView:
方法中,因为当它被注释掉时它仍然崩溃。
最佳答案
SO...实际上问题出在 Three20 框架中。TTTableView 是 UITableView 的子类,有两个有问题的方法:
///////////////////////////////////////////////////////////////////////////////////////////////////
// UIScrollView
- (void)setContentSize:(CGSize)size {
if (_contentOrigin) {
CGFloat minHeight = self.height + _contentOrigin;
if (size.height < minHeight) {
size.height = self.height + _contentOrigin;
}
}
CGFloat y = self.contentOffset.y;
[super setContentSize:size];
if (_contentOrigin) {
// As described below in setContentOffset, UITableView insists on messing with the
// content offset sometimes when you change the content size or the height of the table
self.contentOffset = CGPointMake(0, y);
}
}
- (void)setContentOffset:(CGPoint)point {
// UITableView (and UIScrollView) are really stupid about resetting the content offset
// when the table view itself is resized. There are times when I scroll to a point and then
// disable scrolling, and I don't want the table view scrolling somewhere else just because
// it was resized.
if (self.scrollEnabled) {
if (!(_contentOrigin && self.contentOffset.y == _contentOrigin && point.y == 0)) {
[super setContentOffset:point];
}
}
}
只需评论它们,一切都会正常进行。我不知道这是否会破坏某个地方的某些东西,但至少,你知道问题出在哪里。
关于iphone - 如何阻止 UITableView moveRowAt IndexPath 在重新排序时留下空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2242387/
我正在尝试对每个条目有多个值的关联数组进行排序。 例如 [0] => stdClass Object ( [type] => node [sid] => 158 [score] => 0.059600
我在 mysql 中有“日期”列以这种格式保存日期 2014 年 9 月 17 日(日-月-年) 我需要对它们进行升序排序,所以我使用了这个命令: SELECT * FROM table ORDER
我目前正在将 MySQL 存储过程重写为 MS SQL 存储过程,但遇到了问题。 在 MySQL 存储过程中,有一个游标,它根据最近的日期 (effdate) 选择一个值并将其放入变量 (thestt
我想要 gwt r.QuestionId- 排序。但是我得到未排序的 QuestionId 尽管我提到了 QuestionId ASC 的顺序。 SELECT r.QuestionId,
我有一个关于在 scandir 函数中排序的基本问题。到目前为止,我阅读了 POSIX readdir 的手册页,但没有找到有关订购保证的具体信息。 但是当我遍历大目录(无法更改,只读)时,我在多个系
基本上我必须从 SQL 数据库中构建项目列表,但是用户可以选择对 7 个过滤器的任意组合进行过滤,也可以选择要排序的列以及按方向排序。 正如您可以想象的那样,这会以大量不同的组合进行编码,并且数据集非
我有两张 table 。想象第一个是一个目录,包含很多文件(第二个表)。 第二个表(文件)包含修改日期。 现在,我想选择所有目录并按修改日期 ASC 对它们进行排序(因此,最新的修改最上面)。我不想显
我想先根据用户的状态然后根据用户名来排序我的 sql 请求。该状态由 user_type 列设置: 1=活跃,2=不活跃,3=创始人。 我会使用此请求来执行此操作,但它不起作用,因为我想在“活跃”成员
在 C++ 中,我必须实现一个“类似 Excel/Access”(引用)的查询生成器,以允许对数据集进行自定义排序。如果您在 Excel 中使用查询构建器或 SQL 中的“ORDER BY a, b,
我面临这样的挑战: 检索按字段 A 排序的文档 如果字段 B 存在/不为空 . 否则 按字段排序 C. 在 SQL 世界中,我会做两个查询并创建一个 UNION SELECT,但我不知道如何从 Mon
我想对源列表执行以下操作: map 列表 排序 折叠 排序 展开 列表 其中一些方法(例如map和toList)是可链接的,因为它们返回非空对象。但是,sort 方法返回 void,因为它对 List
我制作了一个用于分析 Windows 日志消息编号的脚本。 uniq -c 数字的输出很难预测,因为根据数字的大小会有不同的空白。此时,我手动删除了空白。 这是对消息进行排序和计数的命令: cat n
我有以下词典: mydict1 = {1: 11, 2: 4, 5: 1, 6: 1} mydict2 = {1: 1, 5: 1} 对于它们中的每一个,我想首先按值(降序)排序,然后按键(升序)排序
我刚刚开始使用泛型,目前在对多个字段进行排序时遇到问题。 案例: 我有一个 PeopleList 作为 TObjectList我希望能够通过一次选择一个排序字段,但尽可能保留以前的排序来制作类似 Ex
有没有办法在 sql 中组合 ORDER BY 和 IS NULL 以便我可以在列不为空时按列排序,但如果它为null,按另一列排序? 最佳答案 类似于: ORDER BY CASE WHEN
我有一个包含 2 列“id”和“name”的表。 id 是常规的自动增量索引,name 只是 varchar。 id name 1 john 2 mary 3 pop 4 mary 5 j
场景 网站页面有一个带有分页、过滤、排序功能的表格 View 。 表中的数据是从REST API服务器获取的,数据包含数百万条记录。 数据库 REST API 服务器 Web 服务器 浏览器 问
假设我有一本字典,其中的键(单词)和值(分数)如下: GOD 8 DONG 16 DOG 8 XI 21 我想创建一个字典键(单词)的 NSArray,首先按分数排序,然后按字
如何在 sphinx 上通过 sql 命令选择前 20 行按标题 WEIGHT 排序,接下来 20 行按标题 ASC 排序(总共 40 个结果),但不要给出重复的标题输出。 我尝试了这个 sql 命令
我有一个奇怪的问题,当从 SQLite 数据库中选择信息并根据日期排序时,返回的结果无效。 我的SQL语句是这样的: Select pk from usersDates order by dateti
我是一名优秀的程序员,十分优秀!