从NSString中删除令牌字符

时间:2013-03-15 05:11:11

标签: objective-c macos cocoa 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]];

没有成功。我知道最后两个只适用于令牌字符位于开头和结尾的情况,但到目前为止这是我的情况。

修改

如果它有助于使用

记录字符
NSLog(@"%hu",[(NSMutableString *)object characterAtIndex:0]);

返回65532。

2 个答案:

答案 0 :(得分:10)

与65532相关联的字符称为“对象替换字符”,它似乎超出了NSCharacterSet使用它的getter处理的Unicode范围的范围。就像你说的那样,NSTokenField正在使用它作为令牌之间的分隔符。这样的东西摆脱它应该工作得很好:

NSCharacterSet *characterset=[NSCharacterSet characterSetWithCharactersInString:@"\uFFFC"];
NSString *newString = [str stringByTrimmingCharactersInSet:characterset];

答案 1 :(得分:3)

NSString *str;  
NSCharacterSet *characterset=[NSCharacterSet characterSetWithCharactersInString:@"<>"];  
str = [str1 stringByTrimmingCharactersInSet:characterset];`