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)]; }
使用performSelector而不是直接调用某个方法将确实删除警告。

  • (无效)alertView:(UIAlertView*)alertView单击按钮索引:(NSInteger)按钮索引{ if([self.libraryController.delegate respondsToSelector:@selector(ActionTaked)]){ [self.libraryController.delegate performSelector:@selector(actiontaked)]; }

使用performSelector而不是直接调用方法将确实删除警告。

我这样做了,但警告仍然存在。您正在声明支持MyNewProtocol而不是OtherProtocol,并且还导入声明OtherProtocol的头文件?我这样做了,但警告仍然存在。您正在声明支持MyNewProtocol而不是OtherProtocol,是否还导入声明OtherProtocol的头文件?