我想不通的是如何将托管对象上下文(和其他对象)传递给 UITableView 子视图。
首先,不需要将托管对象上下文传递给表的子视图。UITableView 通过与它的数据源对话来填充自己的单元格——该表对它所显示的数据一无所知。表格的子视图是它的单元格,它们来自数据源。大多数情况下,视图控制器充当表的数据源和委托——如果需要了解托管对象上下文,它就是数据源,而且通常是视图控制器。
抛开是否应该将 MOC 传递给表格单元格或其他子视图的问题,让我们谈谈如何去做。为了使一个对象直接与另一个对象通信,第一个对象需要指向第二个对象的指针。如果您有一个指向对象的指针,您可以向该对象发送您喜欢的任何消息(尽管如果该对象实现了该方法,这将有很大帮助!)。因此,首要任务是找到您想与之交谈的视图。
您正在谈论在表格之间实现拖放,所以我猜测有问题的子视图是一个表格单元格,并且您的拖放操作涉及更改触摸结束的单元格。您可以通过先将端点转换为表格的局部坐标,然后使用表格的-indexPathForRowAtPoint:
方法来获取触摸结束的表格单元格。一旦有了行的索引路径,就可以通过-cellForRowAtIndexPath:
. 使用指向单元格的指针,您可以向单元格发送一条消息,传递您喜欢的任何参数。
最后,如果您打算采用这种方法,您可能不需要传递托管对象上下文本身。您的拖动所代表的数据似乎更有可能是托管对象而不是托管对象上下文,因此您可能想要传递的是托管对象。上下文是多个托管对象的容器,每个托管对象都有对其所在上下文的引用,因此无需单独传递上下文。