好吧,我有这两个协议:
@protocol ivAuthorizationProtocol <NSObject>
-(void)loginReply:(ivSession*)session;
@end
@protocol ivServerListsProtocol <NSObject>
-(void)serverListLoaded:(NSArray*)serverList;
@end
并有课
@interface ivClientAppDelegate : NSObject <UIApplicationDelegate>
...
@end
@implementation
...
-(void)authorizeWithLogin:(NSString*)login andPassword:(NSString*)password
{
self.login = login;
self.password = password;
// !!! delegate in the next call should conform to ivAuthorizationProtocol,
// so i get warning "class does not implement protocol ivAuthoriaztionProtocol" here
[_apiWrapper authorizeWith:login andPassword:password forDelegate:self];
}
...
@end
我想将协议方法的实现放在单独的文件(类别)中,以免弄乱主要的实现文件。例如,用于实现ivAuthorizationProtocol的类别的标题如下所示:
#import "ivClientAppDelegate.h"
@interface ivClientAppDelegate (ivAuthorizationResponder) <ivAuthorizationProtocol>
-(void)loginReply:(ivSession*)session;
@end
所以,问题是 - 如何摆脱主要实现文件中的警告?如何告诉编译器符合协议的方法位于类别中? 提前谢谢!
答案 0 :(得分:1)
你为什么不考虑这样做:
@interface ivClientAppDelegate : NSObject <UIApplicationDelegate, ivAuthorizationProtocol >
答案 1 :(得分:1)
您可以使用演员来消除警告:
[_apiWrapper
authorizeWith:login
andPassword:password
forDelegate:(id<ivAuthorizationProtocol>)self
];
除此之外,如果没有获得不同的警告(未实现的方法),你就无法做你想做的事。通常,您将在界面中指定协议:
@interface ivClientAppDelegate : NSObject <UIApplicationDelegate,ivAuthorizationProtocol
但是你需要在主@implementation
块中实现这些方法。
请注意,按惯例,类和协议名称应以大写字符开头。
答案 2 :(得分:0)
将协议方法声明为可选方法将解决问题。