我有自定义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方法中遇到断点时,其值始终为零。我怎样才能让它发挥作用?
答案 0 :(得分:1)
你说initialize
,但可能意味着init
。 UITableViewCell
的指定初始值设定项为initWithStyle:reuseIdentifier:
,您可以考虑设置默认值。
修改(对评论的回复)
如果我运行测试,则在设置类时调用+initialize
(并且只调用一次)。没有任何-initialize
方法的调用,也不应该 - 所以你肯定做了一些奇怪的事情。
init
方法的问题有所不同。我称之为“双方同意编程”的初始化方法被调用,这意味着如果涉及的所有程序员都做了他们应该做的事情,那就是有效的,包括Apple程序员(他们几乎像我们一样经常犯错)。 / p>
Apple的表视图控制器标准模板通过调用initWithStyle:reuseIdentifier:
来创建单元格 - 所以如果你的代码没有这样做,你就会遇到问题并需要以其他方式处理init
。猜测一下,你添加了一个-initialize
方法,它会打破共识并混淆你遇到的任何其他程序员。
您的实施还需要尊重super
方法中预期的init
调用。
最后,让你的单元格放在与你的表视图相同的笔尖中是没有意义的 - 它们需要加载,每次请求一个新的单元格时,这意味着它们必须在单独的笔尖(或以编程方式创建)。
答案 1 :(得分:1)
在阅读了Paul的回答后,您可能需要考虑在-awakeFromNib中初始化您的maxValue变量。 nib中的对象实际上已经初始化,可以使用initWithCoder在应用程序中实例化,而不是指定的初始化器。