2011-01-31 58 views
4

我在我的應用程序中有一個UISearchbar。這是一個動態搜索,當用戶輸入文本時,通過遠程API調用搜索遠程數據庫(我認爲它是通過REST)。延遲UISearchbar解析

隨着用戶鍵入,表視圖會動態刷新。我正在使用NSXMLParser來解析XML結果。 (因此3個代表方法; didStartElement,didEndElement)

在某些情況下,結果 中顯示有重複條目,例如,如果用戶輸入YAH,則顯示YAHOO 3-4次。我不知道爲什麼。

我怎樣才能減少時間解析做,還是怎麼着數延遲解析,這樣纔不會使每個字符的請求進入/用戶刪除。

這個,我假設,可能會解決這個問題。

+0

我接受各種解決方案/可能的修復。 – hmthur 2011-01-31 17:54:09

+0

請給我一些額外的可能修復。 – hmthur 2011-01-31 18:43:35

回答

10

一兩件事你可以做的是引入延遲發送關閉之前遠程API調用,而不是發送一個查詢爲每個字符。

// Whenever UISearchbar text changes, schedule a lookup 
- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)text { 
     // cancel any scheduled lookup 
     [NSObject cancelPreviousPerformRequestsWithTarget:self]; 
     // start a new one in 0.3 seconds 
     [self performSelector:@selector(doRemoteQuery) withObject:nil afterDelay:0.3]; 
} 
+0

對於doRemoteQuery,如果我想傳遞參數,該如何編寫? – hmthur 2011-01-31 17:52:16

0

下面是我在其中一個應用中使用的方法的相關部分,用於從Web服務結果中刪除重複項。

NSMutableArray *mutableResults = [[myResults mutableCopy] autorelease]; 
NSMutableSet *duplicates = [NSMutableSet set]; 
NSMutableIndexSet *indexesToRemove = [NSMutableIndexSet indexSet]; 

for (NSString *result in mutableResults) 
{ 
    if (![duplicates containsObject:result]) 
     [duplicates addObject:result]; 
    else 
     [indexesToRemove addIndex:[mutableResults indexOfObject:object]]; 
} 

[mutableResults removeObjectsAtIndexes:duplicates]; 
return mutableResults;