2016-01-18 60 views

回答

1

如果你想使用objc_msgSend,你必須將它轉換爲正確的類型。 我張貼你我如何只是用它在我的項目

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL{ 
SEL wk_sel = NSSelectorFromString(@"loadData:MIMEType:characterEncodingName:baseURL:"); 
((void (*)(id, SEL, id, id, id, id))objc_msgSend)(self,wk_sel,data,MIMEType,textEncodingName,baseURL); 
} 

之一,如果你喜歡一個更清潔sintax你可以使用一個函數指針的例子。 如果你的方法聲明爲:

- (void)doSomething:(id)arg0 withArgument:(float)arg1 err:(NSError **)err{} 

你必須做這樣的事情:

void (*objc_msgSendTyped)(id self, SEL _cmd, id something, float arg1, NSError**error) = (void*)objc_msgSend; 
objc_msgSendTyped(self, @selector(doSomething:withArgument:err:), foo, bar, &error); 
相關問題