2009-09-22 47 views
17

Tôi muốn có thể đặt thông điệp dấu vết của tên lớp hiện tại và tên phương thức cho tất cả các lớp trong dự án của tôi.Tự động truy xuất tên của phương thức hiện tại

Có cách nào để có được tên các phương pháp hiện tại thời gian chạy, tương tự như:

NSLog(@"classname: %@", [self className]); 

nơi tự là một lớp có nguồn gốc ra khỏi NSObject?

Trả lời

35
NSLog(@"method name: %@", NSStringFromSelector(_cmd)); 

_cmd là một đối số ẩn (như self) mà tất cả các phương pháp Objective-C nhận được. Giá trị của nó là bộ chọn được sử dụng để gọi phương thức.

+0

i sử dụng SEL myRunTimeSelector = _cmd. Cảm ơn – Alok

+0

Giải pháp thích hợp bao gồm giải thích. Cảm ơn. –

18

EDITED: tôi nghĩ rằng phương pháp này là chung chung hơn ... check it out ..

NSLog(@"%s", __PRETTY_FUNCTION__); 
+0

lời xin lỗi của tôi nếu tôi đi ra như condescending, didnt có nghĩa là ... Tôi tìm thấy giải pháp này để được chung chung hơn ... – Nishant

+2

câu trả lời tuyệt vời. tôi đặt nó vào một macro, như sau: #define LOGME NSLog (@ "% s", \ _ \ _ PRETTY_FUNCTION \ _ \ _); –

+0

Câu trả lời tuyệt vời @Nantant .. Nó mang lại cho cả tên lớp và tên phương pháp để gỡ lỗi tốt ... –

1

này cũng hoạt động:

NSLog(@"%@", [NSString stringWithUTF8String:__func__]) 
Các vấn đề liên quan