我有一个 iPhone 应用程序,其中我在 ClassB
中有一个名为:
-(void)login:(NSString *)url withDelegate:(id)delegate { }
此方法是从 ClassA
调用的。我传入委托(delegate)参数,以便在此方法完成时将回调传递给 ClassA
:
if(delegate && [delegate respondsToSelector:@selector(parseLogin:)]) {
[delegate parseLogin:loginInfoDictionary];
}
但是,我收到一条警告:-Instance method: parseLogin: not found
这并不奇怪,因为我从未将参数委托(delegate)转换为任何特定类。但是,为了使该方法尽可能抽象,我想将委托(delegate)的数据类型保留为 id
。
这可能吗????
我运行的是 iOS 5.1(如果重要的话)。如果可能的话,我想去掉警告。
非常感谢! 布雷特
最佳答案
处理此问题的常用方法是创建一个协议(protocol)并让 ClassA 实现该协议(protocol)。
@protocol ProtocolName
- (void) parseLogin:(NSDictionary*)dictionary;
@end
然后在ClassA中实现协议(protocol)
@interface ClassA : NSObject<ProtocolName>
然后将您的方法更改为:
-(void)login:(NSString *)url withDelegate:(id<ProtocolName>)delegate { }
这将消除警告并且仍然是可扩展的。
关于iPhone SDK - 避免转换委托(delegate)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10287724/