亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

iOS-如何使用多個參數和afterDelay實現performSelector?

iOS-如何使用多個參數和afterDelay實現performSelector?

開滿天機 2019-12-20 10:04:58
我是iOS新手。我有一個選擇器方法如下-- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second{}我正在嘗試實現這樣的東西-[self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second" afterDelay:15.0];但這給了我一個錯誤的說法-Instance method -performSelector:withObject:withObject:afterDelay: not found關于我所缺少的任何想法嗎?
查看完整描述

3 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

我個人認為,更符合您需求的解決方案是使用NSInvocation。


類似于以下內容的工作:


indexPath和 dataSource是在同一方法中定義的兩個實例變量。


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];

}


查看完整回答
反對 回復 2019-12-20
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

因為沒有這種[NSObject performSelector:withObject:withObject:afterDelay:]方法。


您需要將要發送的數據封裝到某個單一的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];


查看完整回答
反對 回復 2019-12-20
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您可以將參數打包到一個對象中,并使用一個助手方法來調用您原來的方法,就像邁克爾和其他人建議的那樣。


另一個選項是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];


});

或者,正如您已經發現的那樣,如果您不需要延誤,則可以使用 - performSelector:withObject:withObject:


查看完整回答
反對 回復 2019-12-20
  • 3 回答
  • 0 關注
  • 912 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號