2009-02-04 29 views
51

Có ai biết cách tốt nhất để kiểm tra xem phương thức giao thức tùy chọn đã được triển khai chưa.Kiểm tra xem phương thức giao thức tùy chọn đã được triển khai chưa

Tôi cố gắng này:

if ([self.delegate respondsToSelector:@selector(optionalProtocolMethod:)]) 

nơi đại biểu là:

id<MyProtocol> delegate; 

Tuy nhiên, tôi nhận được một lỗi nói rằng chức năng respondsToSelector: không tìm thấy trong các giao thức!

Trả lời

98

respondsToSelector: là một phần của giao thức NSObject. Bao gồm NSObject trong MyProtocol nên giải quyết vấn đề của bạn:

@protocol MyProtocol <NSObject> 

@optional 
-(void)optionalProtocolMethod:(id)anObject; 

@end 
+3

Trừ khi bạn không được phép giữ lại các đại biểu của mình, vậy tại sao bạn lại gọi [phát hành đại biểu]? – SilverSideDown

+1

Để công bằng với grilix có những tình huống mà một đại biểu phải được giữ lại. –

+0

@MikeWeller Tò mò về các trường hợp sử dụng để giữ lại đại biểu. Bất kỳ ví dụ về lý do tại sao bạn sẽ làm điều này? – memmons

2

Những gì tôi đang áp dụng công thức sau:

if(self.delegate && [self.delegate respondsToSelector:@selector(closed)]){ 
    [self.delegate closed]; 
} 

đâu 'đóng' là phương pháp mà tôi muốn gọi.

Các vấn đề liên quan