2011-04-24 43 views
2

我正在使用外部庫,並且我的一個視圖控制器正在爲該框架中的類註冊一個類。現在,我想在這個委託類上執行一些代碼。我正在爲此編寫一個方法,並在我的代理上調用它。在外部庫協議中添加和使用新方法時出現警告

現在,一切正常,但我收到一個警告,這個新添加的方法不是該協議的一部分。

這是我的課:

@protocol MyExtendedDelegate <LibraryDelegate> 

@optional 

- (void)actionTaken; 

@end 

@interface MyController : UITableController <MyExtendedDelegate> { 

} 

@end 

我的控制器中我註冊自身作爲委託庫控制器

LibraryController *libController = [[LibraryController alloc] init]; 
    libController.delegate = self; 

最後,這是一個獨立的代碼我打電話給這個方法的班級:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if ([self.libraryController.delegate respondsToSelector:@selector(actionTaken)]) { 
     [self.libraryController.delegate actionTaken]; 
    } 

這是我收到警告:

- actionTaken協議中未發現
- NSObject的可能不響應actionTaken

我想擺脫這個警告。任何想法。

回答

0

寫擴展舊的新的協議,並符合的是,這樣的:

@protocol MyNewProtocol <OtherProtocol> 
    - (void) myCoolMethod; 
@end 
+0

我這樣做了,但警告還在。 – Abhinav 2011-04-24 05:23:53

+0

而且您聲明支持MyNewProtocol而不是OtherProtocol,並且還導入聲明OtherProtocol的頭文件? – 2011-04-24 05:30:38

1

酒店libraryController.delegate在外部庫中定義,以符合LibraryDelegate。在從您的擴展協議調用方法之前,嘗試將其降至MyExtendedDelegate

if ([self.libraryController.delegate conformsToProtocol:@protocol(MyExtendedDelegate)]) 
{ 
    id<MyExtendedDelegate> extendedDelegate = (id<MyExtendedDelegate>)self.libraryController.delegate; 
    if ([extendedDelegate respondsToSelector:@selector(actionTaken)]) 
    { 
     [extendedDelegate actionTaken]; 
    } 
} 
-1
  • (無效)alertView:(UIAlertView中*)alertView clickedButtonAtIndex:(NSInteger的)buttonIndex { 如果([self.libraryController.delegate respondsToSelector:@selector(actionTaken)]){ [self.libraryController .delegate performSelector:@selector(actionTaken)]; }

使用performSelector而不是直接調用方法將肯定會移除警告。

相關問題