2016-02-29 45 views
4

查找字符(#)的最後一個索引(位置)想要得到的排名,但對於其它字符做工精細婁代碼中最後一次出現的索引,但沒有給予完美的結果的特殊性,「#」中的NSString

代碼在viewDidLoad中正常工作,但不能在textfield中工作shouldChangeCharactersInRange。

代碼:

txtTest.text = @"@ashish @test #vijay $4030 @post"; 


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    NSRange range = [textField.text rangeOfString:@"a" options:NSBackwardsSearch];   
    NSLog(@"a :: %d ",range.location); 

    range = [str rangeOfString:@"@" options:NSBackwardsSearch]; 
    NSLog(@"@ :: %d ",range.location); 

    range = [str rangeOfString:@"#" options:NSBackwardsSearch]; 
    NSLog(@"# :: %d",range.location); 

    range = [str rangeOfString:@"$" options:NSBackwardsSearch]; 
    NSLog(@"$ :: %d\n",range.location); 

} 

結果:: 一個:: 17 :: @ 26 #:: 2147483647 $ :: 20

enter image description here

+2

這就是'NSNotFound'。也許這些字符看起來是相同的,但不是,或者在那裏有一個零寬度的空間或一些這樣的? –

+0

是的,你的'@「#」'字符串中有一個不可見的字符。使用箭頭鍵將光標移到它上面,你會看到它。 –

+0

複製並粘貼到Xcode(這可能autoformat一些事情,甚至可能編碼的東西)。修正了第一行的NSString錯字,運行良好。 – lupz

回答

3

嘗試%lu個無符號代替長%d。它的做工精細

NSString *str = @"ashish @test #vijay $4030 @post"; 

NSRange range = [str rangeOfString:@"a" options:NSBackwardsSearch]; 
NSLog(@"a :: %lu ",(unsigned long)range.location); 

range = [str rangeOfString:@"@" options:NSBackwardsSearch]; 
NSLog(@"@ :: %lu ",(unsigned long)range.location); 

range = [str rangeOfString:@"#" options:NSBackwardsSearch]; 
NSLog(@"# :: %lu",(unsigned long)range.location); 

range = [str rangeOfString:@"$" options:NSBackwardsSearch]; 
NSLog(@"$ :: %lu\n",(unsigned long)range.location); 

一個:: 17

@ :: 26

#:: 13

$ :: 20

+0

感謝您的迴應,並在viewDidLoad其工作正常,但在shouldChangeCharactersInRange它不能正常工作 –

+0

在shouldChangeCharactersInRange也工作正常。 –

+0

奇怪,但它不工作在我的機器:(我也附加了截圖 –

2

首先,你有一個拼寫錯誤。它是NSString *str,而不是NSSting *str

其餘的在我的機器上運行良好。

NSString *str = @"ashish @test #vijay $4030 @post"; 

NSRange range = [str rangeOfString:@"a" options:NSBackwardsSearch]; 
NSLog(@"a :: %lu ",range.location); 

range = [str rangeOfString:@"@" options:NSBackwardsSearch]; 
NSLog(@"@ :: %lu ",range.location); 

range = [str rangeOfString:@"#" options:NSBackwardsSearch]; 
NSLog(@"# :: %lu",range.location); 

range = [str rangeOfString:@"$" options:NSBackwardsSearch]; 
NSLog(@"$ :: %lu\n",range.location); 

答案:

2016-02-29 15:19:39.554 StackOverflowDemo[9189:1825956] a :: 17 
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] @ :: 26 
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] # :: 13 
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] $ :: 20 

你能說清楚一點嗎?

+0

在viewDidLoad其工作正常,但在shouldChangeCharactersInRange其不工作:( –

+0

你檢查並重新輸入)字符串,如評論中所述S'你確實有一些「非標準」的角色,而不同的位置也清楚地表明瞭這一點。 – Eiko