每当我创建一个具有符合协议的委托的init时,我将这样写入init:
- (id)initWithDelegate:(id<ProtocolToConform>)delegate;
这样一来,如果创建对象不符合协议,我将会发出警告.
但是我注意到,即UIAlertView init方法如下所示:
- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles,...
委托参数没有指定符合UIAlertViewDelegate协议?苹果为什么这样做的任何线索?
解决方法
我的理解是,API在几年前是一个很大的混乱,他们仍然在修复所有这些问题.
请注意,直到最近,许多协议是非正式的,几乎在API中的任何地方,您只能以代理身份找到代理.苹果正在每个版本中逐步修复它,例如正式的NSURLConnection代表随iOS 6.0一起提供.或者请注意,在iOS 6.1中,一些id返回类型已更改为instancetype.
那么这是我的初始想法,检查头文件后:
@property(nonatomic,assign) id /*<UIAlertViewDelegate>*/ delegate