55

キーボードが表示された後、ビューをタップするたびに、ビュー内に UISearchBar があります-

-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

これをコンソールに送信します。

<エラー>: CGContextSetStrokeColorWithColor: コンテキストが無効0x0です。これは重大なエラーです。このアプリケーション、またはアプリケーションが使用するライブラリは、無効なコンテキストを使用しているため、システムの安定性と信頼性が全体的に低下しています。この通知は厚意によるものです。この問題を修正してください。今後のアップデートで致命的なエラーになります。

同じエラーを繰り返します。私は正確に何が問題なのだろうかと思っていますか?

そこにはNULLコンテキストがあると思いますが、UISearchBar とは何の関係があるのでしょうか? tnx。

4

4 に答える 4

22

これは、Apple が取り組んでいる既知の問題です。次のベータ リリースで修正する必要があります。

ここを見てください: Xcode Number pad with decimal error

編集:テキストフィールドでその問題を抱えている人にとっては、おそらくこれでうまくいくはずです:

Apple Developer Forums bye Popeye7 より - すべて彼の功績によるものです

この問題の修正を見つけました!これが壊れているアプリが 3 つあるので、私にとっては... これは良い発見です。StackOverflow で解決策を見つけました... 同様の質問に対する 2 つの回答を組み合わせました。

私の場合、ユーザーが 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];
}  

メッセージは、2013 年 9 月 25 日午後 12 時 25 分に Popeye7 によって編集されました。

メッセージは、2013 年 9 月 25 日午後 12 時 33 分に Popeye7 によって編集されました。

于 2013-07-23T12:33:37.843 に答える
16

~/Library/Preferences から iOS シミュレーターの設定を削除した後、これはなくなりました。

~/Library/Preferences に移動します。「com.apple.iphonesimulator.plist」をゴミ箱にドロップします。

ステートフル

于 2013-09-25T16:42:36.447 に答える
4

.xib ファイルに設定されている UISearchBar の AutoLayout 制約がこの問題を引き起こしているようです。コンパイラによってキャッチされなかった冗長または競合する制約がある場合、描画エラーが発生し、これらのエラーがスローされる可能性があります。

  1. UISearchBar を含む .xib ファイルに移動します
  2. UISearchBar をクリックし、Size Inspector に移動します (定規のように見え、通常はコントロールのプロパティの右側にあります)。
  3. 1 つずつ、各制約をクリックして、それらがどこにあるかを確認します。2 つの制約が同じプロパティを測定してはなりません。たとえば、私の場合、コントロールの上部からビューの上部までを測定する 1 つの制約と、コントロールの下部からビューの上部までを測定する別の制約がありました。
  4. 問題のある制約をすべて削除し、ビルドして実行してください! それが機能しない場合は、周囲のコントロールの制約を確認することをお勧めします。
于 2013-09-21T05:18:50.150 に答える
3

この「コンテキストの欠落」は 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: 残念ながら、期待どおりに動作しませんでした。エラーはなくなりましたが、ほとんどの場合、空白文字は削除されません...これに対する解決策はありますか? EDIT 3:私はその問題をあきらめています。この方法は、UITextField のすべてのユース ケースをカバーするわけではなく、UX を低下させます。

于 2013-10-15T07:55:53.870 に答える