UITextView|UITextView 光标定位定位

UITextView根据需求实现UITextField的placeholder效果,我通过添加默认提示文字并修改文字的颜色,监听键盘弹出时,修改光标定位

- (void)keyBordWillShow:(NSNotification *)note {//在最上层避免被挡住 [self.view bringSubviewToFront:self.recommedTextView]; //如果是备注提示内容,则光标定位在第一位 if ([self.recommedTextView.text isEqualToString:NSLocalizedString(@"remark_content", nil)]) { self.recommedTextView.selectedRange = NSMakeRange(0, 0); }}

可是实现时候发现只有第一次进来的时候光标会在首位,查看日志,发现错误消息:
[Common] _BSMachError: port 80cb; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND" [Common] _BSMachError: port 80cb; (os/kern) invalid name (0xf) "Unable to deallocate send right"

【UITextView|UITextView 光标定位定位】查询了解决方案之后,需要在主线程上修改光标定位,但是我比较疑惑的我设置断点调试,本来就是在主线程上的,为什么还需要再次回到主线程:
- (void)keyBordWillShow:(NSNotification *)note {//在最上层避免被挡住 [self.view bringSubviewToFront:self.recommedTextView]; //如果是备注提示内容,则光标定位在第一位 if ([self.recommedTextView.text isEqualToString:NSLocalizedString(@"remark_content", nil)]) { //在主线程中修改 dispatch_async(dispatch_get_main_queue(), ^{ self.recommedTextView.selectedRange = NSMakeRange(0, 0); }); }}

    推荐阅读