web-dev-qa-db-fra.com

UISearchBar CGContext ERREUR

J'ai un UISearchBar dans une vue, chaque fois que je tape dessus, après que le clavier se lève -

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

il envoie ceci à la console:

<Erreur>: CGContextSetStrokeColorWithColor: contexte non valide 0x0. C'est une erreur sérieuse. Cette application, ou une bibliothèque qu'elle utilise, utilise un contexte non valide et contribue ainsi à une dégradation globale de la stabilité et de la fiabilité du système. Cet avis est une courtoisie: veuillez résoudre ce problème. Cela deviendra une erreur fatale dans une prochaine mise à jour.

Il répète la même erreur. Je me demande quel pourrait être exactement le problème?

Je crois qu'il existe un contexte NUL mais qu'est-ce que cela a à voir avec un UISearchBar? tnx.

55
henTdev

C'est un problème connu sur lequel Apple travaille). Il devrait être corrigé dans la prochaine version bêta.

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

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

De Apple Forums de développeurs bye Popeye7 - Donc, tous les crédits à lui

J'ai trouvé un correctif à ce problème! J'ai 3 applications sur lesquelles cela est maintenant cassé, donc, pour moi ... c'est une bonne trouvaille. Trouvé la solution sur StackOverflow ... a combiné deux réponses à une question similaire.

Dans mon cas, un utilisateur appuie sur un barButtonItem et une "alerte" ou une boîte de dialogue apparaît.

Je vois que la grande différence réside dans la façon dont UIAlertView est alloué. Le "NEW WAY" a le textField montrant et fait apparaître le clavier comme il se doit.

Je suis maintenant en mesure de voir le champ textField, d'entrer du texte et cela fonctionne comme je m'y attendais. L'ajout de "initWithFrame" n'a aucun effet sur le placement de textField.

ANCIENNE VOIE ....

- (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 modifié par Popeye7 le 25/09/13 à 12h25

Message modifié par Popeye7 le 25/09/13 à 12h33

22
Henning Schulz

Cela a disparu pour moi après avoir supprimé les préférences du simulateur iOS de ~/Library/Preferences.

Allez dans ~/Library/Preferences Drop "com.Apple.iphonesimulator.plist" dans la corbeille.

Avec état

16
Stateful

Il semble que les contraintes de mise en page automatique d'UISearchBar définies dans le fichier .xib sont à l'origine de ce problème. S'il existe des contraintes redondantes ou conflictuelles qui n'ont pas été détectées par le compilateur, cela peut provoquer une erreur de dessin et générer ces erreurs.

  1. Accédez au fichier .xib qui a le UISearchBar
  2. Cliquez sur le UISearchBar et accédez à l'inspecteur de taille (ressemble à une règle, généralement sur le côté droit avec les propriétés du contrôle)
  3. Une par une, cliquez sur chaque contrainte et regardez pour voir où elles se trouvent - il n'y a pas deux contraintes qui devraient mesurer la même propriété. Par exemple, sur le mien, j'avais une contrainte mesurant du haut du contrôle vers le haut de la vue, et une autre contrainte mesurant du bas du contrôle vers le haut de la vue.
  4. Supprimez toutes les contraintes incriminées, créez et exécutez! Si cela ne fonctionne pas, vous voudrez peut-être vérifier les contraintes sur les contrôles environnants.
4
Christine

Cette chose "de contexte manquant" semble être un bogue iOS 7 et elle ne semble se produire que pour les champs de texte vides. J'utilise une solution de contournement légère dans mes projets jusqu'à ce que ce problème soit résolu par Apple (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 = @"";
    }
}

... ça l'a fait pour moi.

EDIT: Vous devez bien sûr implémenter UITextFieldDelegate. EDIT 2: Malheureusement, cela n'a pas fonctionné exactement comme je m'y attendais. L'erreur a disparu, mais le caractère d'espacement n'est pas supprimé la plupart du temps ... Quelqu'un a une solution pour cela? EDIT 3: J'abandonne cette question. Cette méthode ne couvre pas tous les cas d'utilisation de UITextField et diminue l'UX.

3
max.mustermann