2010-01-30 40 views
12

Ai đó có thể vui lòng giải thích làm thế nào để đi về việc nhận các giá trị truyền cho một phương pháp không tồn tại đang được chặn khi sử dụng:Bắt giá trị đối số từ NSInvocation

+ (void)forwardInvocation:(NSInvocation *)anInvocation; 

+ (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector; 

Cho một thông báo như:

[SomeClass doSomething:@"theThing" withSomething:@"aParam"]; 

Tôi có thể nhận được chữ ký phương thức mà không gặp vấn đề gì nhưng tôi vô cùng bối rối về cách lấy các giá trị được chuyển vào với nó.

Tôi hoàn toàn có cơ sở khi tôi nên sử dụng các phương pháp này hay chỉ thiếu một thứ gì đó?

Trả lời

32

-[NSInvocation getArgument:atIndex:]

Vì vậy, trong trường hợp của bạn, bạn sẽ sử dụng nó như:

__unsafe_unretained NSString * firstArgument = nil; 
__unsafe_unretained NSString * secondArgument = nil; 
[theInvocation getArgument:&firstArgument atIndex:2]; 
[theInvocation getArgument:&secondArgument atIndex:3]; 
NSLog(@"Arguments: %@ and %@", firstArgument, secondArgument); 

Hãy nhớ rằng self_cmd là đối số 0 và 1.

+0

đó là nó, cảm ơn! –

+5

Do firstArgument & secondArgument có cần __unsafe_unretained trong ARC không? – pshah

+0

@pshah Tuyệt đối, nhận xét của bạn đã giải quyết được vấn đề tôi đã gỡ lỗi trong vài giờ qua. Cảm ơn bạn! – Joshua

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