2011-06-10 31 views
6

Làm cách nào để gọi bộ chọn có tên trong mục NSString * trong mục tiêu c? Tôi cũng cần phải gọi bộ chọn chỉ khi mục tiêu sẽ chấp nhận nó. ví dụ.Gọi phương thức động trong mục tiêu-C

+(void) callMethod: (NSString *) method onObject: (id) object 
{ 
    // do some magic 
} 

Khi tôi gọi callMethod: @"Foo" onObject: obj nếu obj cụ Foo sau đó [obj Foo] nên được gọi là, nếu nó không thực hiện nó, không có gì nên xảy ra.

Trả lời

15
SEL selector = NSSelectorFromString(method); 
if ([object respondsToSelector:selector]) { 
    [object performSelector:selector]; 
} 
6

Trước tiên, bạn sử dụng phương pháp NSSelectorFromString() để chuyển đổi chuỗi thành một tên phương pháp, như vậy:

SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);

Sau đó, bạn kiểm tra các phương pháp trên nhận và gọi phương thức nếu nó tồn tại:

if ([receiver respondsToSelector:methodToCall]) { 

    // Method exists, call it. 
    [receiver performSelector:methodToCall]; 

} 

Chỉ cần lưu ý rằng một nhược điểm tiềm năng là bạn sẽ không thể vượt qua đối số. Để chuyển một đối số, bạn sẽ gọi phương thức NSObject performSelector:withObject:. Để chuyển hai đối số, performSelector:withObject:withObject:.

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