3 回答

TA貢獻(xiàn)1815條經(jīng)驗 獲得超6個贊
我個人認(rèn)為,更符合您需求的解決方案是使用NSInvocation。
類似于以下內(nèi)容的工作:
indexPath和 dataSource是在同一方法中定義的兩個實(shí)例變量。
SEL aSelector = NSSelectorFromString(@"dropDownSelectedRow:withDataSource:");
if([dropDownDelegate respondsToSelector:aSelector]) {
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[dropDownDelegate methodSignatureForSelector:aSelector]];
[inv setSelector:aSelector];
[inv setTarget:dropDownDelegate];
[inv setArgument:&(indexPath) atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
[inv setArgument:&(dataSource) atIndex:3]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
[inv invoke];
}

TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊
因為沒有這種[NSObject performSelector:withObject:withObject:afterDelay:]方法。
您需要將要發(fā)送的數(shù)據(jù)封裝到某個單一的Objective C對象(例如,NSArray,NSDictionary,某些自定義Objective C類型)中,然后通過[NSObject performSelector:withObject:afterDelay:]眾所周知的方法將其傳遞。
例如:
NSArray * arrayOfThingsIWantToPassAlong =
[NSArray arrayWithObjects: @"first", @"second", nil];
[self performSelector:@selector(fooFirstInput:)
withObject:arrayOfThingsIWantToPassAlong
afterDelay:15.0];

TA貢獻(xiàn)1808條經(jīng)驗 獲得超4個贊
您可以將參數(shù)打包到一個對象中,并使用一個助手方法來調(diào)用您原來的方法,就像邁克爾和其他人建議的那樣。
另一個選項是dispatch_after,它將采用一個塊并在特定時間將其排入隊列。
double delayInSeconds = 15.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self fooFirstInput:first secondInput:second];
});
或者,正如您已經(jīng)發(fā)現(xiàn)的那樣,如果您不需要延誤,則可以使用 - performSelector:withObject:withObject:
- 3 回答
- 0 關(guān)注
- 910 瀏覽
添加回答
舉報