UISearchBar CGContext ERROR


Tengo una UISearchBar dentro de una vista, cada vez que la toque, después de que aparezca el teclado -

Después de -(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

Envía esto a la consola:

: CGContextSetStrokeColorWithColor: contexto no válido 0x0. Este es un grave error. Esta aplicación, o una biblioteca que utiliza, está utilizando un contexto inválido y, por lo tanto, está contribuyendo a una degradación de la estabilidad y fiabilidad del sistema. Este aviso es un cortesía: por favor solucione este problema. Se convertirá en un error fatal en un próxima actualización.

Repite el mismo error. Me pregunto cuál podría ser exactamente el problema.

Creo que hay un NULL contexto por ahí, pero ¿qué tiene que ver con una barra de búsqueda Uis? tnx.

Author: Jasarien, 2013-07-22

4 answers

Es un problema conocido en el que Apple está trabajando. Debería arreglarse en la próxima versión beta.

Echa un vistazo aquí: Teclado numérico Xcode con error decimal

Editar: Para aquellos que tienen ese problema con un campo de texto tal vez esto debería ayudarte:

De los Foros de Desarrolladores de Apple bye Popeye7-Así que todos los créditos para él

He encontrado una solución para este problema! Tengo 3 aplicaciones en las que ahora está roto, así que, para mí... este es un buen hallazgo. Encontré la solución en StackOverflow... combinó dos respuestas a una pregunta similar.

En mi caso, un usuario toca un barButtonItem y aparece una "alerta" o un diálogo.

Veo que la gran diferencia está en cómo se asigna el UIAlertView. La "NUEVA FORMA" muestra el campo de texto y muestra el teclado como debería.

Ahora puedo ver el campo de texto, ingresar texto y funciona de la manera que espero que lo haga. Agregar el "initWithFrame" de nuevo no tiene ningún efecto en el Ubicación del campo de texto.

A LA ANTIGUA....

- (IBAction)addEntryTapped:(id)sender

{

    [_editorTextView resignFirstResponder];
    [self saveTextChanges];
    [self dismissPopovers];

    _prompt = [[UIAlertView alloc] initWithTitle:@"New Entry Title..."
                                         message:@"\n\n\n" // IMPORTANT
                                        delegate:self
                               cancelButtonTitle:@"Cancel"
                               otherButtonTitles:@"OK", nil];

    _textField = [[UITextField alloc] initWithFrame:CGRectMake(17.0, 55.0, 250.0, 25.0)];

    [_textField setBackgroundColor:[UIColor whiteColor]];
    [_textField setPlaceholder:@"New Entry Title"];

    _textField.borderStyle = UITextBorderStyleRoundedRect;
    _textField.autocapitalizationType = UITextAutocapitalizationTypeWords;
    _textField.autocorrectionType = UITextAutocorrectionTypeNo;

    [_prompt addSubview:_textField];
    [_prompt show];

    // set cursor and show 
    [_textField becomeFirstResponder];
}

NUEVA FORMA...

- (IBAction) addEntryTapped:(id)sender
{
    [_editorTextView resignFirstResponder];
    [self saveTextChanges];
    [self dismissPopovers];

    _prompt = [[UIAlertView alloc] init];
    _prompt.alertViewStyle = UIAlertViewStylePlainTextInput;

    UITextField *text = [_prompt textFieldAtIndex:0];
    _textField = text;

    [_prompt setDelegate:self];
    [_prompt setTitle:@"New Entry Title..."];
    [_prompt setMessage:@""];
    [_prompt addButtonWithTitle:@"Cancel"];
    [_prompt addButtonWithTitle:@"OK"];
    [_textField setPlaceholder:@"New Entry Title"];

    _textField.autocapitalizationType = UITextAutocapitalizationTypeWords;
    _textField.autocorrectionType = UITextAutocorrectionTypeNo;

    [_prompt show];

    // set cursor and show keyboard
    [_textField becomeFirstResponder];
}  

El mensaje fue editado por Popeye7 el 25/9/13 a las 12: 25 PM

El mensaje fue editado por Popeye7 el 25/9/13 a las 12: 33 PM

 22
Author: Henning Schulz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:14:04

Esto se fue para mí después de eliminar las preferencias del Simulador de iOS de ~/Library/Preferences.

Vaya a ~ / Library / Preferences Gota "com.manzana.iphonesimulator.plist" a la basura.

Con estado

 16
Author: Stateful,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-25 16:42:36

Parece que las restricciones de diseño automático de la UISearchBar que se establecen en el .xib archivo están causando este problema. Si hay restricciones redundantes o conflictivas que no fueron captadas por el compilador puede causar un error de dibujo y lanzar estos errores.

  1. Ir a la .archivo xib que tiene la UISearchBar
  2. Haga clic en la barra de UISearchBar y vaya al Inspector de tamaño (parece una regla, generalmente en el lado derecho con las propiedades del control)
  3. Uno por uno, haga clic en cada restricción y observe para ver dónde están: no hay dos restricciones que midan la misma propiedad. Por ejemplo, en la mía, tenía una restricción que medía desde la parte superior del control hasta la parte superior de la vista, y otra restricción que medía desde la parte inferior del control hasta la parte superior de la vista.
  4. ¡Elimina las restricciones ofensivas, compila y ejecuta! Si eso no funciona, es posible que desee comprobar las restricciones en los controles circundantes.
 4
Author: Christine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-21 05:18:50

Esta cosa de "falta de contexto" parece ser un error de iOS 7 y parece ocurrir solo para textfields vacíos. Estoy usando una solución ligera en mis proyectos hasta que Apple solucionó este problema (así que probablemente nunca ;)).

// or wherever
- (void)viewDidLoad
{
     if([textfield.text isEqualToString:@""] || textfield.text == nil)
     {
           textfield.text = @" ";
     }
     ...
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)theTextField
{
     [[NSNotificationCenter defaultCenter] addObserver:self
                                              selector:@selector(keyboardDidShow:)
                                                  name:UIKeyboardDidShowNotification
                                                object:nil];
     return YES;
}

- (void)keyboardDidShow:(NSNotification *)notification
{
    if([textField.text isEqualToString:@" "])
    {
         textField.text = @"";
    }
}

...eso lo hizo por mí.

EDITAR: Es necesario implementar UITextFieldDelegate, por supuesto. EDICIÓN 2: Desafortunadamente, no funcionó exactamente como esperaba. El error ha desaparecido, pero el carácter de espacio en blanco no se elimina la mayor parte del tiempo...Cualquiera tiene una solución ¿por esto? EDICIÓN 3: Estoy renunciando a ese tema. Esta forma no cubre todos los casos de uso de UITextField y disminuye la UX.

 3
Author: max.mustermann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-15 09:28:18