UISearchBar CGContext错误

我有一个视图内的UISearchBar,每当我点击它,键盘上来后 –

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

它发送到控制台:

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

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

我相信有一个NULL的背景,但它与UISearchBar有什么关系? TNX。

这是苹果正在研究的一个已知问题。 应该在下一个beta版本中修复。

看看这里: Xcode数字键盘与十进制错误

编辑:对于那些有文本字段的问题,也许这应该让你左右:

从苹果开发者论坛再见Popeye7 – 所有信用给他

我已经find了解决这个问题! 我有3个应用程序,现在这是打破,所以,对我来说…这是一个很好的发现。 在StackOverflow上find解决scheme…将两个答案结合到一个类似的问题。

在我的情况下,用户点击一个barButtonItem和一个“警报”或对话框出现。

我看到最大的区别在于如何分配UIAlertView。 “新的方式”有textField显示和调用键盘应该。

我现在能够看到textField,input文本,并按我期望的方式工作。 重新添加“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于9/25/13 12:25 PM编辑

消息由Popeye7于9/25/13 12:33 PM编辑

从〜/ Library / Preferences中删除了iOS Simulator的首选项后,这个消失了。

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

有状态

看起来,在.xib文件中设置的UISearchBar的AutoLayout约束导致了这个问题。 如果编译器没有捕获到任何冗余或冲突的约束,则会导致绘图错误并抛出这些错误。

  1. 转到具有UISearchBar的.xib文件
  2. 单击UISearchBar并转到Size Inspector(看起来像一把尺子,通常在右侧用控件的属性)
  3. 点击每一个约束,观察它们的位置 – 没有两个约束条件应该测量同一个属性。 例如,在我的例子中,我有一个从控件顶部到视图顶部的约束,另一个约束是从控件的底部到视图的顶部。
  4. 删除任何违规的约束,build立和运行! 如果这不起作用,您可能需要检查周围控件的约束。

这个“缺less的上下文”的东西似乎是一个iOS 7的错误,似乎只发生在空的文本域。 我在我的项目中使用了一个轻量级的解决方法,直到这个问题被苹果解决(所以可能永远不会;))。

 // 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:不幸的是,它没有完全按照我的预期工作。 错误消失了,但空白字符大部分时间都没有被删除…任何人都有这个解决scheme? 编辑3:我放弃了这个问题。 这种方式并没有掩盖UITextField的所有用例,并且会降低用户体验。