2013-03-15 84 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];`