簡體   English   中英

從NSString刪除令牌字符

[英]Remove tokens characters from 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。

與65532相關的字符稱為“對象替換字符”,它似乎超出了NSCharacterSet的吸氣劑所處理的Unicode范圍。 就像您說的那樣,NSTokenField將其用作令牌之間的分隔符。 像這樣的東西擺脫它應該很好:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM