Si su principal preocupación es cómo evitar hacer demasiadas solicitudes HTTP cuando el usuario ingresa la entrada, entonces mi recomendación es evitar capturar eventos directamente en el UITextField (utilizando los métodos delegados) y, en su lugar, usar un NSTimer que verifique cada N segundos si El contenido del campo de texto ha cambiado desde la última comprobación. Inicie el temporizador cuando el usuario ingrese a la vista y deténgalo cuando el usuario salga de él.
En viewController.h:
@property (nonatomic, retain) NSTimer *timer; @property (nonatomic, retain) NSString *savedText; - (void)autocompleteTextField;
En viewController.m:
- Cómo ganar dinero haciendo desarrollo independiente de aplicaciones iOS
- En Xcode, ¿cuál es la función de cada una de las claves, certificados, perfiles de aprovisionamiento, etc.? ¿Dónde se almacenan y cómo se nombran y usan? ¿Cuáles son las relaciones entre ellos?
- ¿Puedo usar computadoras portátiles que no sean Apple para crear una aplicación iOS?
- Si tuviera 15 años y quisiera entrar en el desarrollo de juegos móviles, ¿dónde comenzaría?
- ¿Qué tenemos que hacer y cuánto tiempo lleva desarrollar una aplicación?
static NSTimeInterval const kTextFieldCheckInterval = 0.25; @implementation ViewController @synthesize timer; @synthesize savedText; - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.savedText = @""; self.timer = [NSTimer timerWithTimeInterval:kTextFieldCheckInterval target:self selector:@selector(autocompleteTextField) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; [self.timer invalidate]; } - (void)autocompleteTextField { if (![self.savedText isEqualToString:self.textField.text]) { self.savedText = self.textField.text; // Perform your autocompletion here } } @end
¡Y tu estas listo! Por supuesto, la mayor parte del trabajo involucrado aquí es asegurarse de que la llamada HTTP y la actualización de la interfaz de usuario se ejecuten sin problemas (y lo suficientemente rápido como para que sea realmente útil para el usuario).
Otra cosa que podría considerar hacer es guardar los objetos de solicitud y cancelar todas las solicitudes HTTP, excepto la más reciente si se instancia más de una. De esa manera, nunca actualizará la interfaz de usuario con resultados rezagados.