类定义中的Int属性

时间:2010-04-24 22:56:12

标签: iphone objective-c

我有自定义UITableViewCells的以下类结构:

NumericEntryCell     - 包含控制可输入文本框的最大值的方法。

SliderCell     - 继承自NEC并包含处理文本框值的滑块控制的方法

TextOnlyCell     - 只包含一个文本框

CELLA     - 继承自SliderCell,最大值为28

CellB     - 继承自TextOnlyCell,最大值为150。

我希望NumericEntryCell包含包含maxValue的属性的定义。我希望能够在子类(CellA或CellB)的initialize方法中为此设置一个值。

目前我在NEC的界面中声明了int maxValue。我在.m文件中为@property int maxValue@synthesize声明了一个属性。但是,尝试从CellA或CellB的initialize方法修改此属性的值无效 - 当我在使用此值的NEC方法中遇到断点时,其值始终为零。我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

你说initialize,但可能意味着initUITableViewCell的指定初始值设定项为initWithStyle:reuseIdentifier:,您可以考虑设置默认值。

修改(对评论的回复)

如果我运行测试,则在设置类时调用+initialize(并且只调用一次)。没有任何-initialize方法的调用,也不应该 - 所以你肯定做了一些奇怪的事情。

init方法的问题有所不同。我称之为“双方同意编程”的初始化方法被调用,这意味着如果涉及的所有程序员都做了他们应该做的事情,那就是有效的,包括Apple程序员(他们几乎像我们一样经常犯错)。 / p>

Apple的表视图控制器标准模板通过调用initWithStyle:reuseIdentifier:来创建单元格 - 所以如果你的代码没有这样做,你就会遇到问题并需要以其他方式处理init。猜测一下,你添加了一个-initialize方法,它会打破共识并混淆你遇到的任何其他程序员。

您的实施还需要尊重super方法中预期的init调用。

最后,让你的单元格放在与你的表视图相同的笔尖中是没有意义的 - 它们需要加载,每次请求一个新的单元格时,这意味着它们必须在单独的笔尖(或以编程方式创建)。

答案 1 :(得分:1)

在阅读了Paul的回答后,您可能需要考虑在-awakeFromNib中初始化您的maxValue变量。 nib中的对象实际上已经初始化,可以使用initWithCoder在应用程序中实例化,而不是指定的初始化器。