为什么我的UITableViewCell没有被投币?

时间:2012-05-02 20:08:41

标签: objective-c ios casting

在我的表格视图中cellForRowAtIndexPath我有

MenuItemCell *cell = (MenuItemCell *)[[[NSBundle mainBundle] loadNibNamed:@"ResultCell" owner:nil options:nil] objectAtIndex:0];

在你告诉我不要使用xib之前:我有多个表格视图,其单元格需要看起来相同。使用xib似乎是实现这一目标的最佳方式。

有问题的ResultCell xib由MenuItemCell“拥有”。 MenuItemCellUITableViewCell的另一个子类的子类。

问题出现了:我在单元格分配行之后直接放置断点,这是我的lldb结果:

(lldb) po [cell class]
(id) $3 = 0x00b6b5fc UITableViewCell

为什么我的单元格是UITableViewCell而不是MenuItemCell? (或者它可能是po并不是解决这个问题的正确方法吗?)

3 个答案:

答案 0 :(得分:3)

您可能没有告诉Xcode / Interface Builder从XIB实例化MenuItemCell,因此它使用默认实现,即UITableViewCell。请注意,转换对象只会使编译器认为它是指定类的实例;它将对象神奇地转换为类的实例。 (换句话说,它是一个copmile-time表达式,而不是运行时表达式。)

答案 1 :(得分:1)

以下是有关如何设置NIB文件的所有者类的屏幕截图

enter image description here

答案 2 :(得分:0)

您始终可以使用isKindOfClass方法检查对象是否属于某个类。

[cell isKindOfClass:[MenuItemCell class]]

另外,像H2CO3说的那样。您可能忘记将所有者类设置为MenuItemCell。