ios cocoa-touch uisearchbar cgcontext

ios - UISearchBar CGContext ERROR



cocoa-touch (4)

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

Eche un vistazo aquí: Xcode Panel numérico con error decimal

Editar: para aquellos que tienen ese problema con un campo de texto, tal vez esto te ayude a moverte:

De Apple Developer Forums bye Popeye7 - Entonces todos los créditos para él

¡He encontrado una solución para este problema! Tengo 3 aplicaciones que ahora están rotas, así que, para mí ... este es un buen descubrimiento. 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 diálogo.

Veo que la gran diferencia radica en cómo se asigna UIAlertView. La "NUEVA MANERA" muestra el campo textField y muestra el teclado como debería.

Ahora puedo ver el campo de texto, ingresar texto y funciona de la manera que esperaba. Agregar de nuevo el "initWithFrame" no tiene efecto en la colocación de textField.

VIEJA FORMA....

- (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 MANERA...

- (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/09/13 a las 12:25 p.m.

El mensaje fue editado por Popeye7 el 25/09/13 a las 12:33 p.m.

Tengo una UISearchBar dentro de una vista, cada vez que la toco, cuando aparece el teclado,

after -(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

lo envía a la consola:

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

Repite el mismo error. Me pregunto cuál es exactamente el problema.

Creo que hay un contexto NULO , pero ¿qué tiene que ver con UISearchBar? tnx.


Este "contexto perdido" parece ser un error de iOS 7 y parece ocurrir solo en campos de texto vacíos. Estoy utilizando una solución liviana en mis proyectos hasta que Apple resuelva este problema (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: Necesita implementar UITextFieldDelegate, por supuesto. EDIT 2: Desafortunadamente, no funcionó exactamente como esperaba. El error se ha ido, pero el carácter de espacio en blanco no se elimina la mayor parte del tiempo ... ¿Alguien tiene una solución para esto? EDIT 3: Me estoy dando por vencido en ese tema. De esta forma, no se cubren todos los casos de uso de UITextField y se reduce el UX.


Esto desapareció después de eliminar las preferencias del simulador de iOS de ~ / Library / Preferences.

Vaya a ~ / Library / Preferences Drop "com.apple.iphonesimulator.plist" a la papelera.

Con estado


Parece que las restricciones de AutoLayout de UISearchBar que se establecen en el archivo .xib están causando este problema. Si hay restricciones redundantes o conflictivas que no fueron detectadas por el compilador, puede causar un error de dibujo y arrojar estos errores.

  1. Ir al archivo .xib que tiene UISearchBar
  2. Haga clic en UISearchBar y vaya al Inspector de tamaño (se ve como una regla, generalmente en el lado derecho con las propiedades del control)
  3. Uno por uno, haga clic en cada restricción y observe dónde están: ninguna restricción debe medir la misma propiedad. Por ejemplo, en el mío, tenía una restricción que mide desde la parte superior del control hasta la parte superior de la vista, y otra restricción que mide desde la parte inferior del control hasta la parte superior de la vista.
  4. ¡Elimine cualquier restricción ofensiva, compilación y ejecución! Si eso no funciona, es posible que desee comprobar las restricciones en los controles circundantes.