这可能很简单,但我无法理解它。我有一个UIViewController,其上放置了两个UITableView子视图(使用Storyboard)。
这两个都有自定义类,用于两个单独的项目列表。使用自定义类是因为可以在表之间拖放每个UITableView中的单元格。视图控制器被segued并具有使用segue推送的托管对象上下文。
我无法弄清楚如何将托管对象上下文(和其他对象)传递给UITableView子视图。对象在表视图类中定义。
我已将IBOutlets设置为每个表视图,因此可以引用UITableViews本身,但我没有自定义对象的可见性。
如何将对象传递给自定义类子视图?
答案 0 :(得分:0)
我无法弄清楚如何传递托管对象上下文(和 其他对象)到UITableView子视图。
首先,不需要将托管对象上下文传递给表的子视图。 UITableView通过与其数据源进行通信来填充单元格 - 表格不知道它显示的数据。表的子视图是其单元格,以及来自数据源的单元格。大多数情况下,视图控制器充当表的数据源和委托 - 如果需要了解托管对象上下文,它是数据源,而且通常是视图控制器。
不考虑你是否将MOC传递给表格单元格或其他子视图的问题,让我们谈谈 如何做到这一点。为了使一个对象直接与另一个对象通信,第一个对象需要指向第二个对象的指针。如果你有一个指向对象的指针,你可以向对象发送你喜欢的任何消息(尽管如果对象实现了这个方法,它会有很多帮助!)。因此,第一项业务是查找您想要与之交谈的视图。
你说的是在你的表之间实现拖放,所以我猜你所讨论的子视图是一个表格单元格,你的放置操作涉及更改触摸结束的单元格。您可以通过首先将结束点转换为表的本地坐标,然后使用表的-indexPathForRowAtPoint:
方法来获取触摸结束的表格单元格。获得行的索引路径后,可以通过-cellForRowAtIndexPath:
获取相应的单元格。使用指向单元格的指针,您可以向单元格发送一条消息,传递您喜欢的任何参数。
最后,如果您 将采用此方法,您可能不需要传递托管对象上下文本身。拖动所代表的数据似乎更有可能是托管对象而不是托管对象 context ,因此它可能是您想要传递的托管对象。上下文是许多托管对象的容器,每个托管对象都有对它所在的上下文的引用,因此不需要单独传递上下文。
答案 1 :(得分: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时节省了大量时间。