2013-03-15 80 views
1

我有一个NSTokenFiled,它通过-tokenField:shouldAddObjects:atIndex:委托方法验证插入的标记。不幸的是,只有在用户按下标记字符时才会调用此方法。当他/她在控制器外单击时,按Esc或Tab键,未完成的字符串会自动转换为令牌,而不会调用验证方法。从NSString中删除标记字符

询问谷歌后,我注意到问题已知,并且有人在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.

+0

什么ü的意思是无效字符/? – 2013-03-15 05:38:07

回答

10

与65532相关的角色被称为 “对象替换字符” 登录人物,它似乎超出了NSCharacterSet处理它的getter的Unicode范围的范围。就像你说的那样,NSTokenField将它用作令牌之间的分隔符。像这样的东西来摆脱它应该只是罚款:

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

谢谢你的完美! – Jacopo 2013-03-15 06:34:41

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