Estoy tratando de configurar un campo de texto que rellena un pickerView con la entrada de los usuarios. Estoy recibiendo este error cada vez que inicie la aplicación:

NSInvalidArgumentException', reason: '-[UITextField isEqualToString:]: unrecognized   selector sent to instance.
@synthesize pickerView;
@synthesize textArray;
@synthesize textField;
- (void)viewDidLoad
{
[super viewDidLoad];
self.textArray = [[NSMutableArray alloc] init];
PFUser *currentUser = [PFUser currentUser];
if (currentUser) {
NSLog(@"Current user: %@" , currentUser.username);
}
else {
[self performSegueWithIdentifier:@"showLogin" sender:self];
}
self.textField.delegate = self;
self.pickerView.dataSource = self;
self.pickerView.delegate = self;
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name:
UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name:
UIKeyboardWillHideNotification object:nil];
self.tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(didTapAnywhere:)];
}
-(void)didTapAnywhere: (UITapGestureRecognizer *) note {
[self.textField resignFirstResponder];
}
-(void) keyboardWillShow:(NSNotification *) note {
[self.view addGestureRecognizer:self.tapRecognizer];
}
-(void) keyboardWillHide:(NSNotification *) note
{
[self.view removeGestureRecognizer:self.tapRecognizer];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:   (NSInteger)component
{
if ([self.textArray count] == 0)
return 1;
return [self.textArray count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:   (NSInteger)component {
return [self.textArray objectAtIndex:row];
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row forComponent:    (NSInteger)component{
NSLog(@"You selected this: %@", [self.textArray objectAtIndex:row]);
}
-(void)textFieldDidEndEditing:(UITextField *)textField{
[self.textArray addObject:self.textField.text];
[self.textField resignFirstResponder];
}
- (IBAction)logout:(id)sender {
[PFUser logOut];
[self performSegueWithIdentifier:@"showLogin" sender:self];
}
@end

Soy nuevo en todo, así que ir fácil en mí si es algo básico que probablemente lo es. Saludos!

  • Eres capaz de publicar la totalidad de la traza de la excepción? Esa línea solo no ayuda con el código que has publicado (como en, cómo se llama isEqualToString: en cualquier lugar?)
  • no estoy seguro si esa es la información que facilita. Estoy literalmente, como sólo una semana en esta programación cosa y saben muy poco acerca de la depuración y así sucesivamente.
  • Eso no ayuda un poco, me temo, pero su pregunta ha sido contestada a continuación.
  • Seguro, usted puede leer más sobre los conceptos básicos de iOS depuración en raywenderlich.com/10209/my-app-crashed-now-what-part-1
InformationsquelleAutor Jared Gross | 2013-08-29

2 Comentarios

  1. 2

    Usted debe estar recibiendo este error en

    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row  forComponent:(NSInteger)component {
    return [self.textArray objectAtIndex:row];
    }

    Ya que están retornando un campo de texto en lugar de texto(título).

    En viewDidLoad, cambiar la siguiente línea:

    [self.textArray addObject:self.textField];

    a

    [self.textArray addObject:self.textField.text];

    Asegúrese de que hay algún texto, por lo que el título no se devuelve vacío. Bien, ¿qué estás realmente tratando de poner en la serie? Es de texto o campo de texto?

    EDITAR

    Primero lo que veo es que falta textfield delegado. Conjunto de self.textField.delegate = self; en viewDidLoad, por lo que textFieldDidEndEditing se llama. En ella, volver a cargar pickerview para que pueda ser correctamente rellena con el texto actual.

    -(void)textFieldDidEndEditing:(UITextField *)textField{
    [self.textArray addObject:self.textField.text];
    [self.pickerView reloadAllComponents];
    }

    Para el selector de Título, cuando no hay datos en la matriz, están regresando 1. Usted debe devolver algo como usted ha dicho en los comentarios.

    - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:   (NSInteger)component {
    if(self.textArray.count == 0)
    return @"There is nothing";
    else
    return [self.textArray objectAtIndex:row];
    }

    Asegúrese de que para despedir el teclado, usted debe llamar a [self.textfield resignFirstResponder] cuando el usuario pulse «enter key». el alambre hasta algún método e.g «hidekeyboard» con su textfield para ello.

    -(IBAction) hidekeyboard:(id) sender
    {
    [sender resignFirstResponder];
    }

    Esperanza de que esto le ayuda..!

    NSInvalidArgumentException - no reconocido selector enviado a la instancia? UITextView /UIPickerView

    • Estoy tratando de tomar el todo lo que el usuario escribe en el campo de texto y meterlo en la pickerView cuando se toque en hecho. Pero no puedo obtener los datos para rellenar ni la puedo quitar el teclado. He actualizado mi código original de nuevo para mostrar el estado actual
    • Pero ahora me estoy poniendo un array vacío de error. Así que lo que están diciendo es completamente correcto. Me gustaría tener el selector mostrar un mensaje al usuario cuando no hay ningún objeto en la matriz.
    • comprobar mi edición
    • Ja, sí, yo era capaz de poner esto en marcha y deshacerse de los errores. pero im todavía no es capaz de llenar el selector de texto desde el campo de texto y el teclado no está aún en vías de desaparición. muh
    • como el teclado no está desapareciendo.Tiene u conjunto delegado para UITextField.y hacer regineFirstResponder.
  2. 1

    Vas a agregar el campo de texto para textArray, así que cuando intenta utilizar textArray para proporcionar un título en titleForRow:forComponent: llegue ese error. textArray debe contener texto, no en los campos de texto.

    Si desea utilizar el campo de texto para rellenar el selector, entonces usted debe implementar el campo de texto delegado método textFieldDidEndEditing: (y tal vez otros), y agregar el texto del campo de texto para textArray en que el método..

    • bueno, gracias chicos! Revisé la página web en la depuración y seguido sus consejos acerca de la implementación de un textFieldDidEndEditing delegado. Mi pregunta ahora es: ¿cómo puedo agregar el texto del campo ‘texto’ a textArray y no el campo de texto?
    • dentro de textFieldDidEndEditing, usted puede hacer [auto.textArray addObject:textField.el texto];
    • He añadido mi textFieldDidEndEditing método a mi código original que he publicado para esta pregunta. Todavía no estoy recibiendo ningún tipo de datos a mostrar en el selector, también no llegar el teclado a desaparecer cuando el usuario toca hecho. de nuevo.. estoy seguro de que su simple, pero agradezco la punteros!
    • lo que allí no tiene sentido — dijo en su pregunta que quería llenar el selector de vista desde el campo de texto, pero ahora que usted está haciendo la vista del selector de entrada para el campo de texto, que es lo contrario (que rellenar el campo de texto en el selector de la selección). Usted también no debe ser instancias de la matriz de nuevo, ya lo hizo en viewDidLoad.

Dejar respuesta

Please enter your comment!
Please enter your name here