0

这可能真的很简单,但我无法理解它。我有一个 UIViewController,上面放置了两个 UITableView 子视图(使用情节提要)。

在此处输入图像描述

它们都具有自定义类,并用于两个单独的项目列表。使用自定义类是因为每个 UITableView 中的单元格都可以在表格之间拖放。视图控制器与 segue 一起推送并具有托管对象上下文。

我想不通的是如何将托管对象上下文(和其他对象)传递给 UITableView 子视图。对象在表视图类中定义。

我已将 IBOutlets 设置为每个表视图,因此可以引用 UITableViews 本身,但我没有自定义对象的可见性。

如何将对象传递给自定义类子视图?

4

2 回答 2

0

我想不通的是如何将托管对象上下文(和其他对象)传递给 UITableView 子视图。

首先,不需要将托管对象上下文传递给表的子视图。UITableView 通过与它的数据源对话来填充自己的单元格——该表对它所显示的数据一无所知。表格的子视图是它的单元格,它们来自数据源。大多数情况下,视图控制器充当表的数据源和委托——如果需要了解托管对象上下文,它就是数据源,而且通常是视图控制器。

抛开是否应该将 MOC 传递给表格单元格或其他子视图的问题,让我们谈谈如何去做。为了使一个对象直接与另一个对象通信,第一个对象需要指向第二个对象的指针。如果您有一个指向对象的指针,您可以向该对象发送您喜欢的任何消息(尽管如果该对象实现了该方法,这将有很大帮助!)。因此,首要任务是找到您想与之交谈的视图。

您正在谈论在表格之间实现拖放,所以我猜测有问题的子视图是一个表格单元格,并且您的拖放操作涉及更改触摸结束的单元格。您可以通过先将端点转换为表格的局部坐标,然后使用表格的-indexPathForRowAtPoint:方法来获取触摸结束的表格单元格。一旦有了行的索引路径,就可以通过-cellForRowAtIndexPath:. 使用指向单元格的指针,您可以向单元格发送一条消息,传递您喜欢的任何参数。

最后,如果您打算采用这种方法,您可能不需要传递托管对象上下文本身。您的拖动所代表的数据似乎更有可能是托管对象而不是托管对象上下文,因此您可能想要传递的是托管对象。上下文是多个托管对象的容器,每个托管对象都有对其所在上下文的引用,因此无需单独传递上下文。

于 2013-07-10T14:35:10.830 回答
0

一种选择是创建一个自定义单元格并将其传递给cellForRowAtIndexPath.

@interface CustomCell : UITableViewCell {
}
@property (weak) NSManagedObject *managedObject
@end

然后

- (UITableViewCell *)tableView:(UITableView *)tableView
    cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    CustomCell *cell =
        [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // get your managed object
    NSManagedObject *managedObject = [_fetchedResultsController objectAtIndexPath:indexPath];

    cell.managedObject = managedObject;
}

等等。

此外,您可能会发现使用诸如Sensible TableView之类的 Core Data 框架非常方便。该框架将自动处理填充所有单元格字段的数据,并且还将自动生成所有详细视图。在使用 Core Data 时为我节省了大量时间。

于 2013-07-10T18:19:22.793 回答