iPhone SDK - 避免转换委托(delegate)类

标签 iphone objective-c ios

我有一个 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/

相关文章:

javascript - 如何检测滚动事件是否像在触摸设备上一样*仅触发一次*?

ios - 在 NSDictionary 中保存特殊字符/瑞典语/德语字符

ios - 从 Cordova iOS 中的委托(delegate)返回数据

ios - FlexBox 不适用于 iPhone 6

ios - Swift 早期函数​​在没有防护的情况下退出 Swift

android - 通话过程如何与蓝牙设备配合使用?

ios - 使用未在 iOS 8.4.1 中安装的 BetaBuilder 创建的临时 OTA 构建

ios - 子类化 UIView 需要什么

ios - 如何仅获取设备上每个联系人的第一个电话号码?

ios - 用多个 SKSpriteNode 初始化 SKNode