Tanrı'nın sevgisi için Restful bir web servisinden ve SOAP'DAN bahsetmediğinizi varsayacağım!
Evet, elbette. Bu yaklaşımı takip edebilirsiniz, ben istek yapmak için bir HTTP lib gibi AFNetworking kullanabilirsiniz ama basitlik uğruna sadece arka plan üzerinde URL içeriği ile NSData init'ing ve GCD kullanarak ana iş parçacığı üzerinde UI güncelleme.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
// To increase performance I advise you to only make the http request on a string bigger than 3,4 chars, and only invoke it
if(textField.text.length + string.length - range.length > 3) // lets say 3 chars mininum
{
// call an asynchronous HTTP request
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL * url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"http:/example.com/search?q=%@", textField.text]];
NSData * results = [NSData dataWithContentsOfURL:url];
NSArray * parsedResults = [NSJSONSerialization JSONObjectWithData: results options: NSJSONReadingMutableContainers error: nil];
// TODO: with this NSData, you can parse your values - XML/JSON
dispatch_sync(dispatch_get_main_queue(), ^{
// TODO: And update your UI on the main thread
// let's say you update an array with the results and reload your UITableView
self.resultsArrayForTable = parsedResults;
[tableView reloadData];
});
});
}
return YES; // this is the default return, means "Yes, you can append that char that you are writing
// you can limit the field size here by returning NO when a limit is reached
}
Gördüğünüz gibi:
Eğer viewDidLoad:
yöntemle
textField.delegate = self;
geçersiz kılma UITextField
temsilci yöntemi textField:shouldChangeCharactersInRange:replacementString:
ile çalışıyoruz viewController için UITextField temsilci ayarla ne kavramların bir listesi var ed alışmak için:
- JSON ayrıştırma (XML'i ayrıştırabilirim ama neden ?! JSON yolu iyidir!)
- HTTP İsteği (yerine I) Yukarıdaki
- Asenkron HTTP isteklerini (ana iş parçacığı blok yok)
- GCD'yı (
dispatch_async
şeyler)
- ne yaptık AFNetworking kullanabilirsiniz Delegeler Performans güncellemesi
(UITextField için bu durumda)
- boyutu 3 karakterden büyük olup olmadığını kontrol ederken, sadece HTTP isteğini her 2/3 karakterde yapabilirsin, diyelim ki sadece
length % 3
.
Sana
Carlos Cevabınız için teşekkür ederim olanlar hakkında bir şeyler okumak öneririz. Kontrol edip size haber vereceğim – Raj