UISearchBar CGContext 错误

Posted

技术标签:

【中文标题】UISearchBar CGContext 错误【英文标题】:UISearchBar CGContext ERROR 【发布时间】:2013-07-21 23:15:52 【问题描述】:

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

-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar之后

它将这个发送到控制台:

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

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

我相信存在 NULL 上下文,但它与 UISearchBar 有什么关系? tnx。

【问题讨论】:

您使用的是 ios 7 测试版吗? 在 ios7SDK/XCode5 的最终版本中开始编辑文本字段时遇到同样的问题... 我认为您不应该将 Henning Schulz 的答案标记为正确答案,因为 iOS 7.0.1 上仍然存在该错误! 另外,无法将右视图添加到搜索栏的文本字段,知道如何在 ios 7 中添加它吗? 有人尝试将带有此“错误”的应用程序上传到 App Store 吗?进展顺利,还是造成了不必要的问题? 【参考方案1】:

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

看看这里:Xcode Number pad with decimal error

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

From Apple Developer Forums bye Popeye7 - So all credits to him

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

在我的例子中,用户点击 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 编辑

【讨论】:

问题在 iOS 7 GM 中仍然存在 问题在最终版本中仍然存在。 :( 这很奇怪......我在 uisearchbar 之外得到了这个。我正在做自定义 drawRects 并收到此错误。看起来很奇怪苹果会放过这个。但它可能在我这边……我不知道,因为苹果似乎为其他人留下了一些触发它的东西。 我在整个应用程序的 UITextFields 中都得到了这个...发生的情况是文本字段中没有光标。 我在 UITextFields 上也遇到了这个问题。【参考方案2】:

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

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

有状态

【讨论】:

干得好...你不认为这可能会对其他应用程序造成副作用吗?? 一次是删除错误,但是双击textfield后又开始报错【参考方案3】:

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

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

【讨论】:

我没有使用自动布局,但也遇到了这个问题。 当 IB 似乎“困惑”并且找不到任何满足所有约束的帧时,我在控制台中看到了这个错误。 (不过,我怀疑这不是唯一的原因......)【参考方案4】:

这个“缺少上下文”的东西似乎是 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 的所有用例,而且会降低用户体验。

【讨论】:

以上是关于UISearchBar CGContext 错误的主要内容,如果未能解决你的问题,请参考以下文章

呈现 UIAlertController 时出现 CGContext 错误

仅在模拟器中出现 CGContext 错误?

从 drawRect 调用的方法中出现无效的 CGContext 错误

UISearchDisplayController CGContext错误iOS 7

使用 CGContext 调整 UIImage 的大小会使我的图像变软,像素密度错误

当 UISearchBar 处于活动状态时,滚动到 UITableView 应用程序会崩溃