webentwicklung-frage-antwort-db.com.de

UISearchBar CGContext FEHLER

Ich habe eine UISearchBar in einer Ansicht, wenn ich darauf tippe, nachdem die Tastatur geöffnet wurde.

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

es sendet dies an die Konsole:

<Fehler>: CGContextSetStrokeColorWithColor: ungültiger Kontext 0x0. Dies ist ein schwerwiegender Fehler. Diese Anwendung oder eine von ihr verwendete Bibliothek verwendet einen ungültigen Kontext und trägt dadurch zu einer allgemeinen Verschlechterung der Systemstabilität und -zuverlässigkeit bei. Dieser Hinweis wurde uns freundlicherweise zur Verfügung gestellt. Bitte beheben Sie dieses Problem. Bei einem bevorstehenden Update wird dies zu einem schwerwiegenden Fehler.

Es wiederholt den gleichen Fehler. Ich frage mich, was genau das Problem sein könnte?

Ich glaube, es gibt einen NULL Kontext, aber was hat das mit einer UISearchBar zu tun? tnx.

55
henTdev

Es ist ein bekanntes Problem, an dem Apple arbeitet. Sollte in der nächsten Beta-Version behoben sein.

Schau mal hier: Xcode Number Pad mit Dezimalfehler

Bearbeiten: Für diejenigen, die dieses Problem mit einem Textfeld haben, sollte dies vielleicht helfen:

Von Apple Entwicklerforen bye Popeye7 - Also alle Credits an ihn

Ich habe ein Update für dieses Problem gefunden! Ich habe 3 Apps, auf denen dies jetzt nicht funktioniert. Für mich ist dies ein guter Fund. Fand die Lösung auf StackOverflow ... kombiniert zwei Antworten auf eine ähnliche Frage.

In meinem Fall tippt ein Benutzer auf ein barButtonItem und eine "Warnung" oder ein Dialogfeld wird angezeigt.

Ich sehe den großen Unterschied darin, wie die UIAlertView zugeordnet ist. Beim "NEUEN WEG" wird das Textfeld angezeigt und die Tastatur wird wie gewünscht angezeigt.

Ich kann jetzt das Textfeld sehen, Text eingeben und es funktioniert so, wie ich es mir vorgestellt habe. Das Hinzufügen von "initWithFrame" hat keine Auswirkungen auf die textField-Platzierung.

ALTER WEG....

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

NEUER WEG...

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

Nachricht wurde von Popeye7 am 25.09.13, um 12:25 Uhr bearbeitet

Nachricht wurde von Popeye7 am 25.09.13, um 12:33 Uhr bearbeitet

22
Henning Schulz

Dies ging für mich nach dem Löschen der iOS Simulator-Einstellungen aus ~/Library/Preferences weg.

Gehen Sie zu ~/Library/Preferences und legen Sie "com.Apple.iphonesimulator.plist" im Papierkorb ab.

Staatsbürgerlich

16
Stateful

Es scheint, dass die AutoLayout-Einschränkungen von UISearchBar, die in der .xib-Datei festgelegt sind, dieses Problem verursachen. Wenn redundante oder widersprüchliche Einschränkungen vorhanden sind, die nicht vom Compiler abgefangen wurden, kann dies zu einem Zeichnungsfehler führen und diese Fehler auslösen.

  1. Wechseln Sie zu der XIB-Datei mit der UISearchBar
  2. Klicken Sie auf die UISearchBar und rufen Sie den Größeninspektor auf (sieht aus wie ein Lineal, normalerweise auf der rechten Seite mit den Eigenschaften des Steuerelements).
  3. Klicken Sie nacheinander auf jede Einschränkung und beobachten Sie, wo sie sich befindet. Es sollten keine zwei Einschränkungen dieselbe Eigenschaft messen. In meinem Beispiel hatte ich eine Einschränkung, die vom oberen Rand des Steuerelements bis zum oberen Rand der Ansicht gemessen wurde, und eine andere Einschränkung, die vom unteren Rand des Steuerelements bis zum oberen Rand der Ansicht gemessen wurde.
  4. Entfernen Sie alle störenden Einschränkungen, erstellen und starten Sie! Wenn dies nicht funktioniert, möchten Sie möglicherweise die Einschränkungen für die umgebenden Steuerelemente überprüfen.
4
Christine

Dieses "fehlende Kontext" -Ding scheint ein iOS 7-Fehler zu sein und nur bei leeren Textfeldern aufzutreten. Ich verwende eine einfache Problemumgehung in meinen Projekten, bis dieses Problem durch Apple (also wahrscheinlich nie;)) behoben wurde.

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

... das hat es für mich getan.

EDIT: Sie müssen natürlich UITextFieldDelegate implementieren. EDIT 2: Leider hat es nicht genau so funktioniert, wie ich es erwartet hatte. Der Fehler ist weg, aber das Leerzeichen wird meistens nicht entfernt ... Hat jemand eine Lösung dafür? EDIT 3: Ich gebe auf dieses Thema. Auf diese Weise werden nicht alle Anwendungsfälle von UITextField abgedeckt, und die UX wird verringert.

3
max.mustermann