UISearchBar CGContext ОШИБКА
У меня есть UISearchBar внутри представления, всякий раз, когда я нажимаю на него, после того, как клавиатура появляется -
после -(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
он отправляет это на консоль:
: CGContextSetStrokeColorWithColor
: неверный контекст0x0
, Это серьезная ошибка. Это приложение или используемая им библиотека используют недопустимый контекст и тем самым способствуют общему снижению стабильности и надежности системы. Это уведомление любезно: пожалуйста, исправьте эту проблему. Это станет фатальной ошибкой в предстоящем обновлении.
Это повторяет ту же ошибку. Мне интересно, в чем конкретно может быть проблема?
Я полагаю, что существует NULL- контекст, но какое это имеет отношение к UISearchBar? Тпй.
4 ответа
Это известная проблема, над которой работает Apple. Должно быть исправлено в следующей бета-версии.
Посмотрите здесь: Xcode Number pad с десятичной ошибкой
Изменить: Для тех, кто имеет эту проблему с текстовым полем, возможно, это должно помочь вам:
Из форумов разработчиков Apple, до свидания Popeye7 - так что все кредиты ему
Я нашел решение этой проблемы! У меня есть 3 приложения, на которых это теперь сломано, так что для меня... это хорошая находка. Нашел решение на Stackru... объединил два ответа на один и тот же вопрос.
В моем случае пользователь нажимает barButtonItem, и появляется "предупреждение" или диалог.
Я вижу большую разницу в том, как распределяется UIAlertView. "NEW WAY" показывает текстовое поле и выдает клавиатуру, как и должно быть.
Теперь я могу видеть 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 25.09.13 в 12:25
Сообщение отредактировал Popeye7 25.09.13 в 12:33
Это исчезло после удаления настроек симулятора iOS из ~/Library/Preferences.
Перейдите в ~ / Library / Preferences и добавьте com.apple.iphonesimulator.plist в корзину.
Stateful
Похоже, что ограничения AutoLayout UISearchBar, которые установлены в файле.xib, вызывают эту проблему. Если есть какие-либо избыточные или конфликтующие ограничения, которые не были обнаружены компилятором, это может привести к ошибке при рисовании и вызвать эти ошибки.
- Перейдите к файлу.xib с UISearchBar.
- Нажмите на UISearchBar и перейдите к Инспектору размера (выглядит как линейка, обычно справа от свойств элемента управления)
- Один за другим, нажмите на каждое ограничение и посмотрите, где они находятся - никакие два ограничения не должны измерять одно и то же свойство. Например, у меня было одно ограничение, измеряющее от верхней части элемента управления до верхней части представления, и другое ограничение, измеряемое от нижней части элемента управления до верхней части представления.
- Удалите любые оскорбительные ограничения, постройте и запустите! Если это не сработает, вы можете проверить ограничения на окружающие элементы управления.
Похоже, что этот "отсутствующий контекст" является ошибкой 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 и уменьшает UX.