55 votes

UISearchBar CGContext ERREUR

J'ai un UISearchBar à l'intérieur d'une vue, à chaque fois que je touche, une fois que le clavier vient -

après l' -(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

il envoie la console:

<Erreur>: CGContextSetStrokeColorWithColor: contexte non valide 0x0. Cette est une grave erreur. Cette application, ou une bibliothèque, il utilise, est à l'aide de un contexte non valide et contribuant ainsi à un ensemble la dégradation de la stabilité du système et la fiabilité. Le présent avis est un courtoisie: veuillez corriger ce problème. Il deviendra une erreur fatale dans un la prochaine mise à jour.

Il répète la même erreur. Je suis wonderring exactement ce que pourrait être le problème?

Je crois qu'il est NULL contexte là, mais ce qu'il a à faire avec un UISearchBar? tnx.

22voto

Henning Schulz Points 427

Ses un problème connu sur lequel Apple est de travailler. Devrait être résolu dans la prochaine version bêta.

Jetez un oeil ici: Xcode pavé numérique avec virgule erreur

Edit: Pour ceux qui ont ce problème avec un champ de texte peut-être cela devrait vous obtenez autour de:

À partir de Forums de Développeurs Apple bye Popeye7 - de Sorte que tous les crédits à lui

J'ai trouvé un correctif pour ce problème! J'ai 3 applications que c'est aujourd'hui brisé, donc, pour moi... c'est une bonne trouvaille. Trouvé la solution sur StackOverflow... à la combinaison de deux réponses à une question similaire.

Dans mon cas, un utilisateur tape un barButtonItem et une "alerte" ou une boîte de dialogue s'affiche.

Je vois la grande différence est dans la façon dont le UIAlertView est alloué. La "NOUVELLE VOIE" a la textField montrant et met le clavier comme il se doit.

Je suis maintenant en mesure de voir la zone de texte, entrez le texte et il fonctionne de la manière que je l'attends. L'ajout de la "initWithFrame" en n'a aucun effet sur le champ de placement.

VIEUX CHEMIN....

- (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];
}

NOUVELLE FAÇON...

- (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];
}  

Message édité par Popeye7 sur 9/25/13 à 12:25 PM

Message édité par Popeye7 sur 9/25/13 à 12:33 PM

16voto

Stateful Points 344

Cela a disparu après la suppression des préférences du simulateur iOS dans ~ / Bibliothèque / Préférences.

Allez dans ~ / Bibliothèque / Préférences. Placez "com.apple.iphonesimulator.plist" dans la corbeille.

Stateful

4voto

Christine Points 511

Il semble que la UISearchBar de la mise en page automatique des contraintes qui sont définies dans le .xib fichier sont à l'origine de ce problème. Si il y a tout redondantes ou contradictoires des contraintes qui n'étaient pas pris par le compilateur, il peut causer un dessin d'erreur et de le jeter ces erreurs.

  1. Aller à la .xib fichier qui a le UISearchBar
  2. Cliquez sur le UISearchBar et aller à la Taille de l'Inspecteur (qui ressemble à une règle, généralement sur le côté droit avec les propriétés du contrôle)
  3. Un par un, cliquez sur chaque contrainte et de regarder pour voir où ils sont - pas de deux contraintes doivent être en mesure de la même propriété. Par exemple, sur la mienne, j'avais une contrainte de la mesure à partir du haut de la commande en haut de la vue, et une autre contrainte de la mesure de la partie inférieure de la poignée en haut de la vue.
  4. Supprimer tout délinquance contraintes, créer et exécuter! Si cela ne fonctionne pas, vous pouvez vérifier les contraintes sur les environs de contrôles.

3voto

max.mustermann Points 531

Ce "contexte manquant" quelque chose semble être un iOS 7 bug et il semble se produire uniquement pour vide textfields. Je suis l'aide d'une légère solution de contournement dans mes projets jusqu'à ce que cette question a obtenu corrigé par Apple (et donc probablement jamais ;)).

// 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 = @"";
    }
}

...qu'il a fait pour moi.

EDIT: Vous avez besoin de mettre en œuvre UITextFieldDelegate, bien sûr. EDIT 2: Malheureusement, il ne fonctionne pas exactement comme je l'espérais. L'erreur a disparu, mais le blanc, le caractère n'est pas supprimé la plupart du temps...quelqu'un a une solution pour cela? EDIT 3: je donne sur cette question. De cette façon, ne pas couvrir tous les cas d'utilisation de UITextField et cela diminue le UX.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X