我正在尝试覆盖UIAlertView的init方法并自定义它,我收到以下警告? “方法调度中缺少哨兵”。
这个警告意味着什么,我该如何解决?
- (id)initWithTitle:(NSString *)title
message:(NSString *)message
delegate:(id)delegate
cancelButtonTitle:(NSString *)cancelButtonTitle
otherButtonTitles:(NSString *)otherButtonTitles, ...
{
if (self = [super initWithTitle:title
message:message
delegate:delegate
cancelButtonTitle:cancelButtonTitle
otherButtonTitles:otherButtonTitles])
{
// Customize alertView
}
return self;
}
答案 0 :(得分:6)
问题似乎是initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:
可变参数,即在最后一个参数之后接受任意数量的参数。当你调用基类的方法时,你有两个问题:
nil
(我认为是编译器所抱怨的)。正如其他人已经指出的那样,UIAlertView
并不打算进行子类化。考虑尝试另一种方法(改为使用便利构造函数/方法)。
答案 1 :(得分:3)
看一下UIAlertView
documentation,特别是:
子类注释
UIAlertView类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。
这意味着覆盖initWithTitle
方法不会有用。你需要尝试另一种方法 - 也许如果你分享你想要实现的目标,那么人们可能会建议另一种方法(例如,使用类别)。
答案 2 :(得分:1)
这是警告,因为你没有在可变方法调用结束时放置nil
(哨兵)。但是,无论如何,你都无法改写一种可变方法。有关详情,请参阅this question。
答案 3 :(得分:0)
这是因为你不能继承UIAlertView
。来自docs:
子类注释
UIAlertView类旨在按原样使用 并且不支持子类化。此类的视图层次结构是 私人,不得修改。