【问题标题】:Remove tokens characters from NSString从 NSString 中删除标记字符
【发布时间】:2013-03-15 05:11:10
【问题描述】:

我有一个NSTokenFiled,它通过-tokenField:shouldAddObjects:atIndex: 委托方法验证插入的令牌。不幸的是,仅当用户按下标记字符时才会调用此方法。当他/她在控件外单击时,按 esc 或 tab 键,未完成的字符串将自动转换为令牌,而无需调用验证方法。

在询问 google 后,我注意到问题是已知的,stackoverflow 上有人建议覆盖 -control:isValidObject: 委托方法以验证剩余的字符串。

不幸的是,传递给此方法的对象是一个NSMutableString,对于已插入到令牌字段中的每个令牌都有一个不可见的字符。可能这就是 cocoa 跟踪在哪里显示令牌的方式。

我的问题是:如何删除那些非法字符?

到目前为止,我已经尝试过这些:

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。

【问题讨论】:

  • 无效字符/是什么意思?

标签: objective-c macos cocoa nsstring


【解决方案1】:

与 65532 关联的字符被称为“对象替换字符”,它似乎超出了 NSCharacterSet 使用它的 getter 处理的 Unicode 范围。就像你说的, NSTokenField 使用它作为标记之间的分隔符。像这样摆脱它应该可以正常工作:

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

【讨论】:

    【解决方案2】:
    NSString *str;  
    NSCharacterSet *characterset=[NSCharacterSet characterSetWithCharactersInString:@"<>"];  
    str = [str1 stringByTrimmingCharactersInSet:characterset];`
    

    【讨论】:

      猜你喜欢
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2017-09-06
      相关资源
      最近更新 更多