moveRowAtIndexPath - 在部分之间移动单元格

2023-11-29

在我的 UITableView 中我有这样的关系

Department -< Employees(名称数组)

我已经为每个模型设置了自定义对象。

In my moveRowAtIndexPath,我可以移动到特定的部分;但是,如果我尝试在部分之间移动它,它就会崩溃。

我的想法是我希望能够将“Tom”从“销售”转移到“营销”

#pragma mark - UITableView delegate

-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    return [_objects count];
}

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    Department *department = [_objects objectAtIndex:section];
    return [department.employees count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId" forIndexPath:indexPath];

    // Configure the cell...
    Department *department = [_objects objectAtIndex:indexPath.section];
    Employee *employee = [department.employees objectAtIndex:indexPath.row];
    cell.textLabel.text = employee.name;

    return cell;
}

-(NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    Department *department = [_objects objectAtIndex:section];
    return department.name;
}

- (BOOL) tableView: (UITableView *) tableView canEditRowAtIndexPath: (NSIndexPath *) indexPath
{
    return YES;
}

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
    if (fromIndexPath == toIndexPath ) return;

    Department *department = [_objects objectAtIndex:fromIndexPath.section];
    Employee *employee = [department.employees objectAtIndex:fromIndexPath.row];

    [self.tableView beginUpdates];
    [department.employees removeObjectAtIndex:fromIndexPath.row];
    [department.employees insertObject:employee atIndex:toIndexPath.row];
    [self.tableView endUpdates];

    [tableView reloadData];
}

我如何获得moveRowAtIndexPath允许我将员工从一个部门调到另一个部门(或者更确切地说,从一个部门调到另一个部门)?

非常感谢

// 下面崩溃;

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-2935.137/UITableView.m:1368
2015-02-20 20:51:15.772 Departments[999:90b] *** 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 (3) must be equal to the number of rows contained in that section before the update (2), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
*** First throw call stack:
(
    0   CoreFoundation                      0x01a221e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x017a18e5 objc_exception_throw + 44
    2   CoreFoundation                      0x01a22048 +[NSException raise:format:arguments:] + 136
    3   Foundation                          0x013814de -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
    4   UIKit                               0x00539f63 -[UITableView _endCellAnimationsWithContext:] + 13402
    5   UIKit                               0x00549cea -[UITableView endUpdatesWithContext:] + 51
    6   UIKit                               0x00549d18 -[UITableView endUpdates] + 41
    7   Departments                         0x00003a48 -[ViewController tableView:moveRowAtIndexPath:toIndexPath:] + 664
    8   UIKit                               0x005573b4 -[UITableView _endReorderingForCell:wasCancelled:animated:] + 619
    9   UIKit                               0x006e0c4f -[UITableViewCell _grabberReleased:] + 73
    10  UIKit                               0x007d1a1b -[UITableViewCellReorderControl endTrackingWithTouch:withEvent:] + 58
    11  UIKit                               0x005641f1 -[UIControl touchesEnded:withEvent:] + 559
    12  UIKit                               0x004a2ddd -[UIWindow _sendTouchesForEvent:] + 852
    13  UIKit                               0x004a39d1 -[UIWindow sendEvent:] + 1117
    14  UIKit                               0x004755f2 -[UIApplication sendEvent:] + 242
    15  UIKit                               0x0045f353 _UIApplicationHandleEventQueue + 11455
    16  CoreFoundation                      0x019ab77f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
    17  CoreFoundation                      0x019ab10b __CFRunLoopDoSources0 + 235
    18  CoreFoundation                      0x019c81ae __CFRunLoopRun + 910
    19  CoreFoundation                      0x019c79d3 CFRunLoopRunSpecific + 467
    20  CoreFoundation                      0x019c77eb CFRunLoopRunInMode + 123
    21  GraphicsServices                    0x031ee5ee GSEventRunModal + 192
    22  GraphicsServices                    0x031ee42b GSEventRun + 104
    23  UIKit                               0x00461f9b UIApplicationMain + 1225
    24  Departments                         0x000046bd main + 141
    25  libdyld.dylib                       0x02ed5725 start + 0
    26  ???                                 0x00000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

您的问题是您已经操作了数据模型,但没有告诉表视图您所做的更改。

因为你打电话beginUpdates/endUpdates表格视图期待一些变化,所以之后endUpdates它调用numberOfRowsInSection- 返回答案“3” - 但它期望 2+0 (因为你没有告诉它新行)。

您有几个选择:

1 - Use moveRowAtIndexPath:toIndexPath:

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
    if (fromIndexPath != toIndexPath ) {

        Department *department = [_objects objectAtIndex:fromIndexPath.section];
        Employee *employee = [department.employees objectAtIndex:fromIndexPath.row];

        [tableView beginUpdates];
        [department.employees removeObjectAtIndex:fromIndexPath.row];
        [department.employees insertObject:employee atIndex:toIndexPath.row];
        [tableview moveRowAtIndexPath:fromIndexPath toIndexPath:toIndexPath];
        [self.tableView endUpdates];
    }
}

2 - 使用重新加载而不使用beginUpdate/endUpdate

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
    if (fromIndexPath != toIndexPath ) {

        Department *department = [_objects objectAtIndex:fromIndexPath.section];
        Employee *employee = [department.employees objectAtIndex:fromIndexPath.row];

        [department.employees removeObjectAtIndex:fromIndexPath.row];
        [department.employees insertObject:employee atIndex:toIndexPath.row];
        [tableView reloadData];
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

moveRowAtIndexPath - 在部分之间移动单元格 的相关文章

  • 尝试使用 Xcode 的新 UI 测试运行多个测试失败

    当我尝试在新的 Xcode beta 中同时运行多个 UI 测试时 它在第一次测试后失败 并在第一次测试后的每个测试中出现错误 UI 测试失败 应用程序状态仍未终止 有人解决这个问题了吗 我也遇到过同样的问题 看来 至少就我而言 应用程序从
  • 使用 flutter 构建 iOS 项目时出现的问题

    升级 Xcode 15 beta 5 后 无法构建项目 显示错误 Firebase 1 问题 DT TOOLCHAIN DIR 不能用于评估 LIBRARY SEARCH PATHS 请改用 TOOLCHAIN DIR FirebaseAn
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • 当 tableview 滚动时 UISegment 值发生变化

    我正在使用 UISegmentControl 在表格视图中显示客观类型问题 但是 如果我在任一单元格中选择一个段 那么如果我滚动 某些段值就会发生更改 我不知道如何解决这个问题 请指导我 细胞尺寸 160px 段色调颜色 蓝色 Coding
  • Swift 无法从上到下呈现视图控制器

    在我的应用程序中 我必须从上到下呈现屏幕 我尝试了下面的代码 它给出了相同的正常呈现风格 let screen self storyboard instantiateViewController withIdentifier Screen1
  • 如何在iOS8自定义键盘上方添加工具栏?

    My problem is write picture I really need you help Maybe inputAccessoryView inputAccessoryViwController can be used but
  • 重新定位时 Mapbox 默认的 compassView 会给出奇怪的结果

    我遇到一种情况 必须将地图框罗盘视图重新定位到不同的位置 当我以其他点作为其 compassView 轴旋转地图时 compassView 现在正在旋转 并给了我一个奇怪的结果 附截图 黑色mapBox默认罗盘图标是旋转的 参考截图 这是
  • Alamofire 仅在 GET 请求上出现请求错误

    我正在努力将我的项目从 AFNetworking 转移到 Alamofire 真的很喜欢这个项目 POST 请求工作得很好 但是 我在尝试发出 GET 请求时收到此错误 这是一些示例代码 class func listCloudCrednt
  • 了解 malloc_history 转储

    如果您曾经问 过如何调试 Objective C 中的释放 分配问题 您将遇到这些可以帮助跟踪问题的环境设置 NSZombieEnabled 释放后保留对象 以便您可以获得指针等 MallocStackLogging 保留对象历史记录以供以
  • 找不到 -lDoubleConversion 的库

    我尝试在 XCode 上构建 但是ld library not found for lDoubleConversion发生错误 我可以建造react native run ios 这可行 但 XCode 无法构建 ld 警告 找不到选项 L
  • iOS 8 单元格大小调整

    我有一个子类UITableViewCell我覆盖setFrame 向单元格添加插图 在 iOS 7 中 一切似乎都工作正常 而在 iOS 8 上 表视图正确加载单元格 但当我刷新表视图时 单元格的大小会调整 通过注释中的代码setFrame
  • iOS 上的三字母国家代码

    我知道您可以在 iOS 上获取所有国家 地区的两个字母的国家 地区代码 但是有没有办法获得三个字母的国家代码 So from http en wikipedia org wiki ISO 3166 1 alpha 2 http en wik
  • Objective-C 中的 at 符号和大括号,@{ ... } 是什么意思?

    我在 Objective C 中有这一行 NSMutableArray mutableArray mutableArray addObject Something aObject Otherthing anotherObject 什么是 部
  • iOS 上邮件到达时收到通知吗?

    当邮件到达标准邮件应用程序时 有没有办法让应用程序收到通知 更准确地说 我想编写一个应用程序 它能够从标准邮件应用程序读取传入的电子邮件 其中包含自定义 txt 格式的新联系人或事件 然后 应用程序应将此新联系人 事件添加到 ipad 反之
  • Xcode 和 Waze 集成

    我正在尝试整合我的app with waze http www waze com 有人知道如何调用位智并发送坐标吗 我没有找到任何 API 或其他相关信息 void navigateToLatitude double latitude lo
  • 快速从 appDelegate 中 popToRootViewController

    我试图从应用程序委托弹出到导航堆栈的根视图控制器 并且在将 obj c 中的内容转换为 swift 时遇到一些问题 obj c 中的工作原理 UINavigationController navigationController UINav
  • Objective-C 语法是什么,椭圆式点表示法? “……”

    我在 Joe Hewitt 的 Three20 源代码中注意到了这一点 而且我以前从未在 Objective C 中见过这种特殊的语法 甚至不知道如何在适当的谷歌搜索中引用它 来自 UITableViewDataSource TTSecti
  • UIView 子类中使用的 CAShapeLayer 不起作用

    我尝试了几个小时 用 CAShapeLayer 在 UIView 周围获得虚线边框 但我没有显示它 ScaleOverlay h import
  • 启动时运行后台任务

    我正在编写一个 iOS 应用程序 它使用 Dropbox Datastore API 在多个设备之间同步数据 在 Android 上 我可以告诉服务在启动时启动 这使其能够同步 设备关闭时可能发生的任何更改 我无法找到让我的应用程序在 iO
  • 如何使用 UISlider 以及如何将滑块设置为特定值?

    我是第一次使用 UIslider 首先我想知道如果值的范围是 0 到 10 如何获取滑块位置的值 其次 我希望我的滑块设置为 5 个不同的值 如 1 2 3 4 5 slider should not set between the lab

随机推荐

  • pandas 中 max 的列标签

    我正在尝试从 pandas 数据框中提取行和贡献列标签中的最大值 例如 A B C D index x 0 1 2 3 y 3 2 1 0 我期望以下输出 A B C D Maxv Con index x 0 1 2 3 3 D y 3 2
  • 在 Firestore for Swift 中按时间戳传递和过滤项目

    我正在尝试在 Firestore 中传递今天的日期Timestamp在我的应用程序中 我得到这样的今天的日期 formatter dateFormat MMMM d yyyy let result formatter string from
  • 运行 Android 4.04 的 socket.connect() Galaxy Tab 2 上出现 NullPointer 异常

    我似乎在 socket connect 上遇到了这个奇怪的错误 09 18 14 41 22 968 W System err 2593 java lang NullPointerException 09 18 14 41 22 968 W
  • 我可以安装旧版本的 VS 扩展“Web Essentials 2012”吗?

    它删除了我一直依赖的 TypeScript 功能 现在我早上的工作效率看起来相当不错 我使用的是一台干净的机器 但它已经引入了新的 3 0 版本 该版本缺少我最受益的部分 您可以使用以下链接将版本恢复到 2 9 http vswebesse
  • 相当于iOS中的R

    在 android 中 我们有代表资源的 R 类 其中我们引用了所有资源 并且可以在代码中轻松访问它们 iOS 中有类似的吗 我有这个疑问 因为我希望能够定义具有不同值的多个文件 例如 ViewController1 的默认值 ViewCo
  • 将 PredicateBuilder 与 VB.NET 结合使用

    我已在单独的 C 项目中重新创建了 Predicatebuilder 类 并尝试在 VB NET 项目中使用它 但我不断收到以下错误 重载解析失败 因为没有可访问的 或 接受此数量的参数 当我像这样使用它时 Dim predicate Pr
  • XCeed PropertyGrid 自定义 IntegerUpDown

    我试图将不同的增量值分配给对象的不同字段 例如 考虑一个班级有谁int1 and int2 当我设置ShowAdvancedOptions为我的真实PropertyGrid 整数向上向下按钮放入文本框中没有问题 但我希望能够编辑数字单独增加
  • 如何在gganimate中使两帧之间的过渡时间更长

    我正在使用 gganimate 创建散点图的多个帧的动画 每个帧对应于一年 我想强调两个特定的连续帧之间的变化 以便这两个帧在其他帧中脱颖而出 但我不知道该怎么做 这是我的数据和代码的示例 structure list x 1 6 y 2
  • 如何终止 BufferedInputStream .read() 调用

    我正在编写一个程序来从服务器下载非常大的文件 2GB 我编写的程序能够恢复部分完成的下载 为了模拟糟糕的互联网连接 我在下载过程中将以太网线从路由器中拔出 不幸的是 这导致我的程序挂起以下调用 while bytesRead in read
  • 使用正则表达式验证 IP

    我需要验证格式为 000000000 到 255255255 的 IP 范围 3 组数字之间没有任何分隔符 最终 IP 所包含的三组中的每一组都应为 000 是的 用 0 填充 到 255 由于这是我的第一个 stackoverflow 条
  • 如何从远程主机的以太网地址获取其IP地址?

    我正在寻找一些 Linux 代码来从以太网地址查找 IP 地址 我想我必须做一些反向 A RP 欺骗 但我没有找到任何例子 http compnetworking about com od networkprotocolsip f conv
  • Android 谷歌地图在 Zoom 上调整标记大小

    我需要在一个较小的区域中显示大约 30 个标记 当用户更改缩放比例时 是否可以调整 Google Maps API V2 标记的大小 或者我应该使用较小的图像 提前致谢 如果你想在缩放时做一些事情 你可以创建一个扩展原始MapView的自定
  • 副SIM卡的MNC和MCC

    我知道使用TelephonyManager我们可以获得我们网络提供商的MNC和MCC TelephonyManager tel TelephonyManager getSystemService Context TELEPHONY SERV
  • 如何在Python中只打印一个新行? “\n”没有给我想要的效果

    我很清楚print n 但这在我的cmd中给出了这个结果 第一个输出 带有 原始 列表 继续到下一行 但使用 n似乎跳过了一行 我怎样才能确保print pretty函数转到下一行 而不是跳过一行 到目前为止 这是我的代码 board fo
  • 如何在 symfony yml 配置文件中从 docker 获取环境变量

    在 docker compose yml 中 mysql image mysql latest container name mysql environment MYSQL ROOT PASSWORD root MYSQL DATABASE
  • 计算两个给定日期之间的天数

    任何人都可以纠正我的脚本中的错误来计算两个日期之间的天数 日期已通过表格输入 变量信息如下 departon gt Array 0 gt 1 1 gt June 2 gt 2011 returnon gt Array 0 gt 31 1 g
  • CancellationTokenSource 的行为不符合预期

    在这种情况下 预期的是 如果用户通过按回车键取消任务 则另一个任务会被挂钩ContinueWith会运行 但事实并非如此 根据AggregateException尽管在中进行了显式处理 但仍会抛出ContinueWith这显然没有被执行 请
  • gvisTables 未在闪亮的应用程序中呈现

    我试图解决的实际问题 我正在创建一个包含数据表的仪表板 我希望用逗号将数字格式化为千位分隔符 但是当 DT 包与 Shiny 一起使用时 它 显然 存在问题 因为逗号分隔的格式会导致 DT renderDataTable 将数字读取为字符
  • 如何在 QLineEdit 中放置静态文本(后缀、前缀)?

    如何将静态文本放入QLine编辑在 Qt C 中 这样它就不能被删除 并且当我写入 QLineEdit 时 它不应该被分隔 没有常规的方法来放置前缀或后缀QLabel 占位符 只要你能做到QLineEdit是设置一个文本 当里面没有文本时将
  • moveRowAtIndexPath - 在部分之间移动单元格

    在我的 UITableView 中我有这样的关系 Department lt Employees 名称数组 我已经为每个模型设置了自定义对象 In my moveRowAtIndexPath 我可以移动到特定的部分 但是 如果我尝试在部分之