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 错误
从 drawRect 调用的方法中出现无效的 CGContext 错误
UISearchDisplayController CGContext错误iOS 7