2016-05-04 18 views
0

I Methode init habe, wo ich meinen Beobachter bin EinstellungUITextFieldTextDidChangeNotification wird zweimal aufgerufen, wenn die chinesischen Schriftzeichen autocorrecting

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(textChanged:) 
              name:UITextFieldTextDidChangeNotification 
              object:textField]; 

Also, wenn Benutzer chinesische Schriftzeichen aus autocorrect betreten nennt es unten Methode zweimal, aber wenn ich eingeben Englisch Brief Tastatur nannte es diese Methode nur einmal,

- (void)textChanged:(NSNotification *)notification 
{ 

} 

Eine Idee, wie kann ich das vermeiden?


Hallo Ich habe einige Backtrace für autocorrect chinesisches Schriftzeichen & Englisch Charakter, sie haben unterschiedliche Verfahren.

Backtrace für autocorrect chinesisches Schriftzeichen

1 eingeben

frame #6: 0x0000000102dfb109 Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:] + 66 
    frame #7: 0x0000000104585ab8 UIKit`-[UITextField fieldEditorDidChange:] + 257 
    frame #8: 0x0000000104590cb7 UIKit`-[UITextInputController _sendDelegateChangeNotificationsForText:selection:] + 138 
    frame #9: 0x0000000104598751 UIKit`-[UITextInputController setMarkedText:selectedRange:] + 744 
    frame #10: 0x0000000103d1e200 UIKit`-[UIFieldEditor setMarkedText:selectedRange:] + 38 
    frame #11: 0x00000001045896bb UIKit`-[UITextField setMarkedText:selectedRange:] + 90 
    frame #12: 0x0000000104144c4a UIKit`-[UIResponder(UITextInput_Internal) _setMarkedText:selectedRange:] + 91 
    frame #13: 0x0000000103e432f8 UIKit`-[UIKeyboardImpl unmarkText:] + 167 
    frame #14: 0x0000000103e45df6 UIKit`__59-[UIKeyboardImpl handleAcceptedCandidate:executionContext:]_block_invoke_2 + 39 
frame #6: 0x0000000102dfb109 Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:] + 66 
    frame #7: 0x0000000104585ab8 UIKit`-[UITextField fieldEditorDidChange:] + 257 
    frame #8: 0x0000000104590cb7 UIKit`-[UITextInputController _sendDelegateChangeNotificationsForText:selection:] + 138 
    frame #9: 0x000000010458970e UIKit`-[UITextField unmarkText] + 48 
    frame #10: 0x0000000104144d8a UIKit`-[UIResponder(UITextInput_Internal) _unmarkText] + 61 
    frame #11: 0x0000000103e43203 UIKit`-[UIKeyboardImpl unmarkText] + 43 
    frame #12: 0x0000000103e43305 UIKit`-[UIKeyboardImpl unmarkText:] + 180 
    frame #13: 0x0000000103e45df6 UIKit`__59-[UIKeyboardImpl handleAcceptedCandidate:executionContext:]_block_invoke_2 + 39 

Backtrace für autocorrect Englisch Charakter

frame #6: 0x0000000102dfb109 Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:] + 66 
frame #7: 0x0000000104585ab8 UIKit`-[UITextField fieldEditorDidChange:] + 257 
frame #8: 0x0000000104590cb7 UIKit`-[UITextInputController _sendDelegateChangeNotificationsForText:selection:] + 138 
frame #9: 0x0000000104593281 UIKit`-[UITextInputController _insertText:fromKeyboard:] + 893 
frame #10: 0x0000000104593bcd UIKit`-[UITextInputController insertText:] + 365 
frame #11: 0x0000000103d1d728 UIKit`-[UIFieldEditor insertFilteredText:] + 800 
frame #12: 0x000000010458a7d7 UIKit`-[UITextField insertFilteredText:] + 103 
frame #13: 0x0000000103e48a83 UIKit`-[UIKeyboardImpl insertText:] + 125 
frame #14: 0x0000000103e45278 UIKit`-[UIKeyboardImpl performKeyboardOutput:] + 496 
frame #15: 0x0000000103e44e65 UIKit`__55-[UIKeyboardImpl handleKeyboardInput:executionContext:]_block_invoke_2 + 164 
+0

Wo fügen Sie Beobachter in View-Controller hinzu? Ich meine, in welcher Methode? – developer

+0

Wenn es zweimal aufgerufen wird, sehen Sie sich den Textwert des Textfelds an. Ist der Wert zwischen den beiden Anrufen unterschiedlich? – rmaddy

+0

@developer Ich habe es in Init-Methode aufgerufen. –

Antwort

0

geben könnte SiegenanntMethode zweimal. Vergessen Sie auch nicht, den Beobachter zu entfernen [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:nil]; in viewWillDisappear: