解析 NSBlockOperation 的 executionBlocks

Posted

技术标签:

【中文标题】解析 NSBlockOperation 的 executionBlocks【英文标题】:Parsing NSBlockOperation's executionBlocks 【发布时间】:2014-02-10 15:41:25 【问题描述】:

我有一个 UITableView,其中每个部分都包含一行,每行都包含一个 UICollectionView。 UITableView 是数据源并委托给 Core Data 数据库。对数据库的更新调用 NSFetchedResultsController 的控制器:didChangeObject:将块排队以更新相关集合的方法:

switch (type) 
    case NSFetchedResultsChangeInsert: 
        [self.blockOperation addExecutionBlock:^
            [collectionView insertSections:[NSIndexSet indexSetWithIndex:newIndexPath.section] ];
        ];
    break;
...

然后我想在这里批量执行块:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller

    [collectionView performBatchUpdates:^
        [self.blockOperation start];
     completion:^(BOOL finished) 
        // Do whatever
    ];

这是使用 Ash Furrow 和 Blake Watters 的 techniques 将核心数据数据库连接到 UICollectionView。

我的问题是,如何访问-controllerdidChangeContent: 中正确的collectionView 对象? self.blockOperation 中的每个块都有相关的 collectionView,但我不知道如何从 NSBlockOperation 的 executionBlocks 属性中解析出来,或者即使这是最好的方法。 Ash 和 Blake 的示例只有一个 UICollectionView,而我有很多。

【问题讨论】:

【参考方案1】:

您不想只使用单个块操作,因为之后您将无法分离数据。相反,每个集合视图(也是每个部分)使用一个块操作。以关联的索引路径作为键将每个添加到字典中(检查它是否已经存在并根据需要创建/更新)。运行块时,迭代字典,获取索引路径(键)的集合视图并运行块操作(值)。

【讨论】:

以上是关于解析 NSBlockOperation 的 executionBlocks的主要内容,如果未能解决你的问题,请参考以下文章

从 NSBlockOperation 获得价值?

NSBlockOperation 和块中的对象

带有嵌套完成块的 NSBlockOperation

NSOperation

Windows“cmd.exe”是不是以不同方式解析参数?

为啥 cmd.exe 以不同方式解析插入符号