55

我在视图中有一个 UISearchBar,每当我点击它时,在键盘出现后 -

-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

它将这个发送到控制台:

<错误>: CGContextSetStrokeColorWithColor: 无效的上下文0x0。这是一个严重的错误。此应用程序或它使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将成为即将到来的更新中的致命错误。

它重复相同的错误。我想知道究竟可能是什么问题?

我相信那里有一个NULL上下文,但它与 UISearchBar 有什么关系?tnx。

4

4 回答 4

22

这是 Apple 正在解决的已知问题。应该在下一个 beta 版本中修复。

看看这里:Xcode Number pad with decimal error

编辑:对于那些对文本字段有这个问题的人来说,这可能会让你得到解决:

来自 Apple 开发者论坛,再见 Popeye7 - 所有功劳归于他

我找到了解决这个问题的方法!我有 3 个应用程序现在已被破坏,所以,对我来说……这是一个很好的发现。在 StackOverflow 上找到了解决方案...结合了一个类似问题的两个答案。

就我而言,用户点击 barButtonItem 并出现“警报”或对话框。

我看到最大的区别在于 UIAlertView 的分配方式。“NEW WAY”显示了 textField 并按应有的方式调出键盘。

我现在可以看到 textField,输入文本,它按我期望的方式工作。重新添加“initWithFrame”对 textField 的位置没有影响。

旧方式....

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

新方法...

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

消息由 Popeye7 于 2013 年 9 月 25 日下午 12:25 编辑

消息由 Popeye7 于 2013 年 9 月 25 日下午 12:33 编辑

于 2013-07-23T12:33:37.843 回答
16

从 ~/Library/Preferences 中删除 iOS 模拟器首选项后,这对我来说消失了。

转到 ~/Library/Preferences 将“com.apple.iphonesimulator.plist”放入垃圾箱。

有状态的

于 2013-09-25T16:42:36.447 回答
4

似乎是在 .xib 文件中设置的 UISearchBar 的 AutoLayout 约束导致了这个问题。如果编译器未捕获任何冗余或冲突的约束,则可能会导致绘图错误并引发这些错误。

  1. 转到具有 UISearchBar 的 .xib 文件
  2. 单击 UISearchBar 并转到 Size Inspector(看起来像一个标尺,通常在控件属性的右侧)
  3. 一个接一个地单击每个约束并观察它们的位置 - 没有两个约束应该测量相同的属性。例如,在我的身上,我有一个从控件顶部到视图顶部的约束,另一个从控件底部到视图顶部的约束。
  4. 删除任何有问题的约束,构建并运行!如果这不起作用,您可能需要检查周围控件的约束。
于 2013-09-21T05:18:50.150 回答
3

这个“缺少上下文”的事情似乎是一个 iOS 7 错误,它似乎只发生在空文本字段中。我在我的项目中使用了一种轻量级的解决方法,直到 Apple 解决了这个问题(所以可能永远不会;))。

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

...为我做到了。

编辑:当然,您需要实现 UITextFieldDelegate。编辑2:不幸的是,它并没有像我预期的那样工作。错误消失了,但大部分时间都没有删除空格字符......有人有解决方案吗?编辑3:我放弃了这个问题。这种方式并不能覆盖 UITextField 的所有用例,并且会降低用户体验。

于 2013-10-15T07:55:53.870 回答