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约束导致了这个问题。 如果编译器没有捕获到任何冗余或冲突的约束,则会导致绘图错误并抛出这些错误。
- 转到具有UISearchBar的.xib文件
- 单击UISearchBar并转到Size Inspector(看起来像一把尺子,通常在右侧用控件的属性)
- 点击每一个约束,观察它们的位置 – 没有两个约束条件应该测量同一个属性。 例如,在我的例子中,我有一个从控件顶部到视图顶部的约束,另一个约束是从控件的底部到视图的顶部。
- 删除任何违规的约束,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的所有用例,并且会降低用户体验。