我应该如何处理 kvo 中的 NSIndexSet 来更新表视图?

2024-02-03

我开始使用键值观察,并且我正在观察的可变数组在更改字典中为我提供了 NSIndexSets (有序可变对多)。据我所知,问题是表视图希望我给它充满索引的 NSArrays。

我考虑过实现一种自定义方法来将一个方法转换为另一个方法,但这似乎很慢,而且我的印象是必须有更好的方法来使该表视图在数组更改时更新。

这是我的 UITableViewDataSource 中的方法。

 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
     switch ([[change valueForKey:NSKeyValueChangeKindKey] unsignedIntValue]) {
         case NSKeyValueChangeSetting:
             NSLog(@"Setting Change");
             break;
         case NSKeyValueChangeInsertion:
             NSLog(@"Insertion Change");

             // How do I fit this:
             NSIndexSet * indexes = [change objectForKey:NSKeyValueChangeIndexesKey];

             // into this:
             [self.tableView insertRowsAtIndexPaths:<#(NSArray *)#> withRowAnimation:<#(UITableViewRowAnimation)#>

             // Or am I just doing it wrong?

             break;
         case NSKeyValueChangeRemoval:
             NSLog(@"Removal Change");
             break;
         case NSKeyValueChangeReplacement:
             NSLog(@"Replacement Change");
             break;
         default:
             break;
     }
 }

这看起来很容易。使用枚举索引集enumerateIndexesUsingBlock: http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSIndexSet_Class/Reference/Reference.html#//apple_ref/doc/uid/20002197-SW17并将每个索引粘贴到NSIndexPath object:

NSMutableArray * paths = [NSMutableArray array];
[indexes enumerateIndexesUsingBlock:^(NSUInteger index, BOOL *stop) {
        [paths addObject:[NSIndexPath indexPathWithIndex:index]];
    }];
[self.tableView insertRowsAtIndexPaths:paths
                      withRowAnimation:<#(UITableViewRowAnimation)#>];

如果您的表视图有部分,则只会稍微复杂一点,因为您需要获取正确的部分编号,并在索引路径中指定它:

NSUInteger sectionAndRow[2] = {sectionNumber, index};
[NSIndexPath indexPathWithIndexes:sectionAndRow
                           length:2];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何处理 kvo 中的 NSIndexSet 来更新表视图? 的相关文章

随机推荐

  • 如何获取使用 FileSystemWatcher 创建的新文件的名称?

    我正在使用 FileSystemWatcher 监视文件夹 如果我将文件下载到那里 如何获取该下载文件的名称 例如 如果我下载了一个名为 TextFile txt 的文件 我将如何让它以字符串形式返回该文件 我假设这适用于所有四个触发器 更
  • 将颜色属性从 xaml 绑定到 c#

    我正在尝试将自制控件的属性从我的视图绑定到我的视图模型 当我将颜色直接绑定到 xaml 中的另一个元素时 它可以工作 但是当我尝试将它绑定到我的视图模型中的属性时 财产没有变化 xaml
  • 我们如何反转十六进制颜色代码?

    我的 Web API 将发送我的视图的背景颜色 背景颜色范围从白色开始 ffffff变黑 000000 所以我无法为我的信息文本设置任何固定文本颜色 设置文本颜色的最佳方法是什么 我正在考虑反转背景颜色并将其设置为我的文本颜色 但我不知道如
  • 如何复制带有子文件夹的文件夹? [复制]

    这个问题在这里已经有答案了 该脚本在 PowerShell 中完美运行 它复制具有特定类型的所有文件 但我想用它的文件夹和子文件夹复制文件 dest C example files Get ChildItem Path C example
  • 如何在参数化测试中测试异常?

    在 JUnit4 中 您可以通过在一个方法中提供参数集合来编写参数化单元测试 这些参数集合将传递给测试的构造函数并在另一种方法中进行测试 如果我有一个参数希望抛出异常 我该如何指定它 这就是我如何使用带有预期异常的 junit 参数化测试
  • 在 Eclipse 中更改字体大小的键盘快捷键?

    通过首选项更改 Eclipse 中的字体大小相对简单 并在本论坛中回答过多次 However I d like to change font size quickly e g with Ctrl and Ctrl like in Linux
  • 为什么在编译依赖于 .NET Standard 的 .NET Framework 项目时缺少此 NuGet 依赖项?

    我有一个 Visual Studio 解决方案 有 3 个项目 顶层是 NET Framework 4 6 1 控制台应用程序 项目 A 它依赖于 NET Framework 4 6 1 类库 项目 B 项目 B 依赖于 NET Stand
  • 一次在文件系统上执行多个操作的正确方法是什么?

    假设我想知道一个文件是否存在 如果它是一个目录 则另外检索它的内容 我可能会这样走 browseSimple FilePath gt IO Either FilePath FilePath browseSimple x do isAvail
  • Apache 与 Angular2 - 404 未找到

    我已经使用 Bitnami 映像在 AWS 服务器上部署了 Angular2 应用程序 该应用程序由 Apache 提供服务 在端口 8080 上配置了虚拟主机 只要我从index html 如果我想访问不同的页面 已在RouteConfi
  • 检测 Windows 和 Linux 上的操作系统和 Java

    我有一个基于 Maven 的 JavaFX 项目 我想在 Windows 和 Linux 上构建 Maven 项目 为了在部署捆绑包时自动化该过程 我想自动检测操作系统 在 Windows 中我有这样的配置
  • 计算过滤列中有多少个不同值(或获取不同值列表)

    有没有办法计算一个数组中不同值的数量filteredExcel 中的列 使用公式https exceljet net formula count unique values in a range with countif https exc
  • 如何从异步方法获取button_ClickEvent中的字符串

    我的朋友们 我有以下代码 public static CookieContainer cookies public static HttpWebRequest GetNewRequest string targetUrl CookieCon
  • Python:使 eval 安全[重复]

    这个问题在这里已经有答案了 我想要一种简单的方法来在 Python 中执行 计算器 API 现在我不太关心计算器将支持的确切功能集 我希望它接收一个字符串 比如说 1 1 并返回一个带有结果的字符串 在我们的例子中 2 有没有办法制作eva
  • Minishift:无法解析:*.192.168.64.2.nip.io

    我已经安装了微移在 OSX 上使用brew brew cask install minishift beta minishift version Minishift version 1 0 0 我已经成功启动了 minishift 并创建了
  • 从 Java 调用 PHP [重复]

    这个问题在这里已经有答案了 可能的重复 从java调用php方法 https stackoverflow com questions 614894 invoking a php method from java 我正在编写一个Java 类
  • 复杂数据的曲线拟合

    我想用共享相同参数的两个函数来拟合复杂的数据集 为此我使用了 def funcReal x a b c d return np real a 1j b np exp 1j k x kappa1 x np exp kappa2 x c 1j
  • python 映射函数迭代

    results 是一个嵌套列表 如下所示 gt gt gt results 1 2 3 a b 1 2 3 c d 4 5 6 a b 4 5 6 c d pr 是一个函数 其定义如下 gt gt gt def pr line print
  • 实体框架 - 在更新时保存子实体

    我有一个发票实体 它有子发票日志实体 当我第一次创建发票并添加其 InvoiceLog 实体并保存时 它工作正常 但是 如果我随后编辑发票并尝试添加其他 InvoiceLog 实体 它会完全忽略新的 InvoiceLog 实体并且根本不保存
  • 有一些常见的方法来写入和读取配置文件吗?

    我需要我的程序创建和编辑一个配置文件 其中包含有关对象集的信息 然后在每次执行时读取它 是否有某种我可以使用的配置样式指南 我在 Windows 上使用 C 我建议查看提升 属性树 http www boost org doc libs 1
  • 我应该如何处理 kvo 中的 NSIndexSet 来更新表视图?

    我开始使用键值观察 并且我正在观察的可变数组在更改字典中为我提供了 NSIndexSets 有序可变对多 据我所知 问题是表视图希望我给它充满索引的 NSArrays 我考虑过实现一种自定义方法来将一个方法转换为另一个方法 但这似乎很慢 而