Iphone 在外部库协议中添加和使用新方法时出现警告
我正在使用一个外部库,我的一个视图控制器正在注册为该框架中某个类的委托。现在,我想在一个地方对这个委托类执行一些代码。我正在为此编写一个方法,并在我的代理上调用它 现在,一切正常,但我得到一个警告,这个新添加的方法不是协议的一部分Iphone 在外部库协议中添加和使用新方法时出现警告,iphone,objective-c,cocoa-touch,ios,delegates,Iphone,Objective C,Cocoa Touch,Ios,Delegates,我正在使用一个外部库,我的一个视图控制器正在注册为该框架中某个类的委托。现在,我想在一个地方对这个委托类执行一些代码。我正在为此编写一个方法,并在我的代理上调用它 现在,一切正常,但我得到一个警告,这个新添加的方法不是协议的一部分 if ([self.libraryController.delegate conformsToProtocol:@protocol(MyExtendedDelegate)]) { id<MyExtendedDelegate> extendedDel
if ([self.libraryController.delegate conformsToProtocol:@protocol(MyExtendedDelegate)])
{
id<MyExtendedDelegate> extendedDelegate = (id<MyExtendedDelegate>)self.libraryController.delegate;
if ([extendedDelegate respondsToSelector:@selector(actionTaken)])
{
[extendedDelegate actionTaken];
}
}
这是我的班级:
@protocol MyExtendedDelegate <LibraryDelegate>
@optional
- (void)actionTaken;
@end
@interface MyController : UITableController <MyExtendedDelegate> {
}
@end
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if ([self.libraryController.delegate respondsToSelector:@selector(actionTaken)]) {
[self.libraryController.delegate actionTaken];
}
最后,这是我调用此方法的单独类中的代码:
@protocol MyExtendedDelegate <LibraryDelegate>
@optional
- (void)actionTaken;
@end
@interface MyController : UITableController <MyExtendedDelegate> {
}
@end
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if ([self.libraryController.delegate respondsToSelector:@selector(actionTaken)]) {
[self.libraryController.delegate actionTaken];
}
下面是我收到的警告:
@protocol MyExtendedDelegate <LibraryDelegate>
@optional
- (void)actionTaken;
@end
@interface MyController : UITableController <MyExtendedDelegate> {
}
@end
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if ([self.libraryController.delegate respondsToSelector:@selector(actionTaken)]) {
[self.libraryController.delegate actionTaken];
}
--在协议中找不到采取的操作--NSObject可能不会响应所采取的操作
我想摆脱这个警告。任何想法。编写一个扩展旧协议的新协议,并遵守该协议,例如:
@protocol MyNewProtocol <OtherProtocol>
- (void) myCoolMethod;
@end
@protocol MyNewProtocol
-(空)霉酚酸酯法;
@结束
编写一个扩展旧协议的新协议,并遵守该协议,例如:
@protocol MyNewProtocol <OtherProtocol>
- (void) myCoolMethod;
@end
@protocol MyNewProtocol
-(空)霉酚酸酯法;
@结束
属性libraryController.delegate
在外部库中定义,以符合LibraryDelegate
。在从扩展协议调用方法之前,请尝试向下转换到myextendedlegate
if ([self.libraryController.delegate conformsToProtocol:@protocol(MyExtendedDelegate)])
{
id<MyExtendedDelegate> extendedDelegate = (id<MyExtendedDelegate>)self.libraryController.delegate;
if ([extendedDelegate respondsToSelector:@selector(actionTaken)])
{
[extendedDelegate actionTaken];
}
}
if([self.libraryController.protocol:@protocol(myextendedelegate)])
{
id extendedDelegate=(id)self.libraryController.delegate;
if([extendedDelegate respondsToSelector:@selector(ActionTaked)])
{
[采取的延期代理行动];
}
}
属性libraryController.delegate
在外部库中定义,以符合LibraryDelegate
。在从扩展协议调用方法之前,请尝试向下转换到myextendedlegate
if ([self.libraryController.delegate conformsToProtocol:@protocol(MyExtendedDelegate)])
{
id<MyExtendedDelegate> extendedDelegate = (id<MyExtendedDelegate>)self.libraryController.delegate;
if ([extendedDelegate respondsToSelector:@selector(actionTaken)])
{
[extendedDelegate actionTaken];
}
}
if([self.libraryController.protocol:@protocol(myextendedelegate)])
{
id extendedDelegate=(id)self.libraryController.delegate;
if([extendedDelegate respondsToSelector:@selector(ActionTaked)])
{
[采取的延期代理行动];
}
}
- (无效)alertView:(UIAlertView*)alertView单击按钮索引:(NSInteger)按钮索引{ if([self.libraryController.delegate respondsToSelector:@selector(ActionTaked)]){ [self.libraryController.delegate performSelector:@selector(actiontaked)]; }
- (无效)alertView:(UIAlertView*)alertView单击按钮索引:(NSInteger)按钮索引{ if([self.libraryController.delegate respondsToSelector:@selector(ActionTaked)]){ [self.libraryController.delegate performSelector:@selector(actiontaked)]; }
使用performSelector而不是直接调用方法将确实删除警告。我这样做了,但警告仍然存在。您正在声明支持MyNewProtocol而不是OtherProtocol,并且还导入声明OtherProtocol的头文件?我这样做了,但警告仍然存在。您正在声明支持MyNewProtocol而不是OtherProtocol,是否还导入声明OtherProtocol的头文件?