2011-10-22 31 views
0

服務器返回之前響應我的情況是這樣的:如何在iOS

當你按下一個按鈕,它會先隱藏按鈕,然後發送一個HTTP請求到服務器,該請求被髮送到一個PHP腳本並執行「exe」以使用打印機打印某些內容。

但是,當我測試應用程序,我發現按鈕隱藏時,服務器上的「EXE」退出,結果是,當我按下按鈕,應用程序就像「沒有響應」,按鈕 劑量不隱藏並保持「按下」狀態,這不是用戶友好的。那麼有什麼想法 能幫我解決這個問題?


最後,我用SLEF performSelectorInBackground,因爲我也沒在意,結果PHP的回報,它的效果很好,比異步調用更簡單。

+0

最好將您的解決方案作爲答案發布,而不是編輯您的問題;請注意,您甚至可以選擇自己的答案作爲接受的答案,因此可以關閉此問題... – aschipfl

回答

0

接口更新只能在方法結束後才能完成。嘗試使用performSelector以額外方法運行php部分:

- (void)yourCurrentMethod { 
    button.hidden = YES; 
    [self performSelector:@selector(doSomething)]; 
} 

- (void)doSomething { 
    /* call php script, etc */ 
} 
+0

-performSelector是異步的嗎? [self doSomething]和[self performSelector:@selector(doSomething)]之間有什麼區別?前者是同步的,後者是異步的? – PinkyJie

+1

如果你想讓它在後臺運行,我會建議[self performSelectorInBackground:@selector(doSomething)]。 – huesforalice

0

對不起,我的意思是performSelector:withObject:afterDelay:

- (void)yourCurrentMethod { 
    button.hidden = YES; 
    [self performSelector:@selector(doSomething) withObject:nil afterDelay:0.1]; 
} 

- (void)doSomething { 
    /* call php script, etc */ 
} 

將處理隱藏在UI,然後調用DoSomething的法不使其成爲一個後臺線程,所以你可以使用同步請求。如果您只想調用php並且不關心結果,那麼使用異步請求會更有用(但更乾淨),您並不需要這些工作。

+0

我終於用[performSelectorInBackground],效果很好,謝謝 – PinkyJie