Jac*_*opo 1 macos cocoa objective-c nsstring
我有一个NSTokenFiled通过-tokenField:shouldAddObjects:atIndex:委托方法验证插入的令牌.不幸的是,只有当用户按下标记字符时才会调用此方法.当他/她在控件外部单击时,按esc或tab,未完成的字符串将自动转换为令牌而不调用验证方法.
在询问谷歌后,我注意到问题已知并且stackoverflow上有人建议覆盖-control:isValidObject:委托方法以验证剩余的字符串.
不幸的是,传递给此方法的对象是NSMutableString对于已经插入到令牌字段中的每个令牌都具有不可见字符.可能这就是可可如何跟踪显示令牌的位置.
我的问题是:如何删除这些非法字符?
到目前为止,我尝试过这些:
NSString *newString = [NSString stringWithUTF8String:[stringWithInvisibleCharcters UTF8String]];
NSString *newString = [stringWithInvisibleCharacters stringByTrimmingCharactersInSet:[NSCharacterSet illegalCharacterSet]];
NSString *newString = [stringWithInvisibleCharacters stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];
Run Code Online (Sandbox Code Playgroud)
没有成功.我知道最后两个只适用于令牌字符位于开头和结尾的情况,但到目前为止这是我的情况.
编辑:
如果它有助于记录字符
NSLog(@"%hu",[(NSMutableString *)object characterAtIndex:0]);
Run Code Online (Sandbox Code Playgroud)
返回65532.
Cod*_*aFi 10
与65532相关联的字符称为"对象替换字符",它似乎超出了NSCharacterSet使用它的getter处理的Unicode范围的范围.就像你说的那样,NSTokenField正在使用它作为令牌之间的分隔符.像这样摆脱它应该工作得很好:
NSCharacterSet *characterset=[NSCharacterSet characterSetWithCharactersInString:@"\uFFFC"];
NSString *newString = [str stringByTrimmingCharactersInSet:characterset];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |