2013-07-21 60 views
55

我有一個觀點,每當我在敲打裏面一個UISearchBar,鍵盤自帶經過長達 -的UISearchBar CGContext上ERROR

-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

發送此控制檯:

<錯誤>:CGContextSetStrokeColorWithColor:無效的上下文0x0。這 是一個嚴重的錯誤。此應用程序或其使用的庫正在使用無效的上下文,從而導致整個系統穩定性和可靠性降低。此通知是 禮貌:請解決此問題。在即將到來的更新中,這將成爲致命錯誤 。

它重複出現相同的錯誤。我想知道究竟是什麼問題?

我相信有一個NULL上下文,但它與UISearchBar有什麼關係? tnx。

+5

您使用的是iOS 7 beta嗎? –

+1

對此有何更新? –

+12

在ios7SDK/XCode5最終版本中開始編輯文本字段時遇到同樣的問題... – Elechtron

回答

22

這是Apple正在研究的一個已知問題。應該在下一個beta版本中修復。

看一看這裏:Xcode Number pad with decimal error

編輯:對於那些誰擁有這個問題有一個文本框,也許這應該讓你的周圍:

From Apple Developer Forums bye Popeye7 - So all credits to him

我已經找到了解決對於這個問題!我有3個應用程序,現在這個應用程序已被破解,所以,對我來說...這是一個很好的發現。在StackOverflow上找到解決方案...將類似問題的兩個答案組合在一起。

在我的情況下,用戶點擊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]; 
} 

NEW WAY ...

- (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]; 
} 

消息已於13年9月25日在12:25 PM

消息上13年9月25日被編輯由Popeye7在下午12時33分

編輯者Popeye7
+70

問題仍然存在於iOS 7 GM – jjxtra

+31

問題仍然存在最終版本中。 :( –

+1

這很奇怪......我在uisearchbar之外得到這個,我在做自定義drawRects並得到這個錯誤,看起來很奇怪的蘋果公司會讓這個漏洞,但它可能在我身邊......我可以'因爲看起來蘋果公司爲其他人引發了一些事情。 –

4

看起來在.xib文件中設置的UISearchBar的AutoLayout約束導致了這個問題。如果有任何未被編譯器捕獲的冗餘或衝突約束,它可能會導致繪圖錯誤並拋出這些錯誤。

  1. 轉到具有的UISearchBar
  2. 點擊的UISearchBar並轉到尺寸檢查(看起來像一把尺子,通常在右側控件的屬性)
  3. 一個由的.xib文件一,點擊每個約束並觀察它們的位置 - 沒有兩個約束條件應該測量同一個屬性。例如,在我的作品中,我有一個從控件頂部到視圖頂部的約束條件,另一個約束條件是從控件底部到視圖頂部。
  4. 刪除任何違規約束,生成並運行!如果這不起作用,您可能需要檢查周圍控件的約束條件。
+0

這已經爲我修好了!感謝 –

+3

我沒有使用自動佈局,但我也遭受了這個問題。 – glasz

+0

當IB看起來「困惑」,並且找不到滿足所有約束條件的任何幀時,我在控制檯中看到了這個錯誤。 (我懷疑這不是唯一的原因,雖然...) –

16

從〜/ Library/Preferences中刪除iOS Simulator偏好設置後,這個消失了。

轉到〜/ Library/Preferences 將「com.apple.iphonesimulator.plist」放到垃圾箱中。

有狀態

+1

這對我來說伎倆,謝謝 – tilo

+0

偉大的工作...不要認爲這可能會導致其他應用程序的副作用? –

+3

這是刪除錯誤一次,但雙擊文本字段後,它再次開始給錯誤 –

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:不幸的是,它並沒有像我期望的那樣工作。錯誤消失了,但空白字符大部分時間都沒有被刪除...任何人都有解決方案嗎?編輯3:我放棄了這個問題。這種方式並沒有涵蓋UITextField的所有用例,並且它降低了用戶體驗。