Forward delete calls selectedTextRange on class that does not adopt UITextInput
Originator: | andy | ||
Number: | rdar://15114422 | Date Originated: | 30-Sep-2013 |
Status: | Open | Resolved: | |
Product: | iOS SDK | Product Version: | 7.0.2 |
Classification: | Reproducible: | Always |
Summary: When the user types forward delete using an external keyboard, an attempt is made to access the selectedTextRange property of the class that is first responder even if it does not adopt the UITextInput protocol. Steps to Reproduce: 1. Open the project in the attached zip in Xcode 2. Run the project on iOS7 using the simulator 3. Type fn-backspace 4. App crashes Expected Results: No attempt is made to access the selectedTextRange property on a class that does not adopt the UITextInput protocol Actual Results: An attempt is made to access the selectedTextRange property, even though the class does not adopt the UITextInput protocol. This typically leads to a crash when the unrecognized selector is sent to the instance: 2013-09-30 21:36:23.790 UITextInputCrash[15191:a0b] -[UITextInputCrashViewController selectedTextRange]: unrecognized selector sent to instance 0xa009770 2013-09-30 21:36:23.792 UITextInputCrash[15191:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITextInputCrashViewController selectedTextRange]: unrecognized selector sent to instance 0xa009770' *** First throw call stack: ( 0 CoreFoundation 0x017485e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x014b78b6 objc_exception_throw + 44 2 CoreFoundation 0x017e5903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275 3 CoreFoundation 0x0173890b ___forwarding___ + 1019 4 CoreFoundation 0x017384ee _CF_forwarding_prep_0 + 14 5 UIKit 0x00640dfc -[UIResponder(UITextInput_Internal) _deleteForwardAndNotify:] + 59 6 UIKit 0x004076cd -[UIKeyboardImpl deleteForwardAndNotify:] + 92 7 UIKit 0x00400062 -[UIKeyboardImpl handleKeyCommand:repeatOkay:] + 2628 8 UIKit 0x00414aae -[UIKeyboardImpl handleKeyEvent:executionContext:] + 1288 9 UIKit 0x0041450f __33-[UIKeyboardImpl handleKeyEvent:]_block_invoke + 51 10 UIKit 0x009371b8 -[UIKeyboardTaskQueue continueExecutionOnMainThread] + 402 11 UIKit 0x0093785f -[UIKeyboardTaskQueue addTask:] + 144 12 UIKit 0x004144d4 -[UIKeyboardImpl handleKeyEvent:] + 227 13 UIKit 0x0023dfbb -[UIApplication _handleKeyUIEvent:] + 330 14 UIKit 0x00384634 -[UIResponder(Internal) _handleKeyUIEvent:] + 59 15 UIKit 0x00384634 -[UIResponder(Internal) _handleKeyUIEvent:] + 59 16 UIKit 0x0023de6a -[UIApplication handleKeyUIEvent:] + 84 17 UIKit 0x0023de0e -[UIApplication handleKeyHIDEvent:] + 458 18 UIKit 0x00225c8c _UIApplicationHandleEventQueue + 2954 19 CoreFoundation 0x016d18af __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15 20 CoreFoundation 0x016d123b __CFRunLoopDoSources0 + 235 21 CoreFoundation 0x016ee30e __CFRunLoopRun + 910 22 CoreFoundation 0x016edb33 CFRunLoopRunSpecific + 467 23 CoreFoundation 0x016ed94b CFRunLoopRunInMode + 123 24 GraphicsServices 0x036859d7 GSEventRunModal + 192 25 GraphicsServices Version: iOS 7.0.2 Notes: Configuration: iPhone, iPad and iOS simulator running iOS 7. The problem does not appear to occur on earlier version of iOS, i.e. I believe this is a regression. Attachments: 'UITextInputCrash.zip' was successfully uploaded.
Comments
Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!
In attempting to work around the problem, I have discovered that inputDelegate is also called.
A work around is to declare two properties on the class that will be the first responder:
@property UITextRange *selectedTextRange; @property id inputDelegate;