2012-01-09 34 views
2

我寫了需要通知另一個類的Objective-C類,所以我定義了一個委託協議:指定類自己的代表,有類型檢查在Interface Builder

@protocol glob_protocol <NSObject> 
    @required 
    - (IBAction) call:(int) val val2:(int) val2; 
@end 

在我的課,我有一個存儲委託的成員:

IBOutlet id <glob_protocol> delegate; 

在Interface Builder中連接類/實例時,現在沒有類型檢查。我可以將任何課程作爲代表連接。

有沒有辦法啓用類型檢查?我希望只有實現協議的類/實例才能被設置爲委託。

感謝您的任何提示, Torsten。

編輯: 我剛剛檢查了UIKit的頭文件,看看是否有任何額外的信息或關鍵字,但我沒有找到任何。我想知道InterfaceBuilder從哪些實例可以設置爲委託的信息。

回答

2

這通常工作:

- (void)setDelegate:(id<glob_protocol>)inDelegate 
{ 
    if (inDelegate) { 
    assert([inDelegate conformsToProtocol:@protocol(glob_protocol)]); 
    } 
    ... 
} 

雖然,在你想要的水平/相位不是,它工作得很好,因爲連接不經常改變。

+0

感謝您的回答,但它並沒有幫助我。在代碼中我(當然)檢查代理是否不爲零,並在調用之前檢查它是否符合協議。我有興趣讓InterfaceBuilder檢查一個實例是否可以設置爲委託。 – 2012-01-10 18:57:59

+0

@Torsten我明白這個問題,你想要什麼。我回答了我所知道的最接近的選擇,因爲目前沒有支持/破解你想要的(afaik)。 – justin 2012-01-10 20:50:26

+0

好的,謝謝。如果無法在InterfaceBuilder中啓用檢查,那麼我將堅持使用我現在的功能,並在分配代表時小心謹慎。 – 2012-01-10 22:05:06

相關問題