2010-10-05 63 views
1

哦,這個代碼有什麼問題!?!?!問題使用NSString比較:選項:範圍,衝突的結果

NSString *s1 = @"5 Oct 2010 18:30"; 
    NSString *s2 = @"5 Oct 2010 09:47"; 
    NSRange range = {0, 11}; // Both "D MMM YYYY " and "DD MMM YYYY" 
    NSComparisonResult result = 0; 
    result = [s1 compare:s2 options:NSLiteralSearch range:range]; 
    // result == -1 
    NSString *sa = [s1 substringWithRange:range]; 
    NSString *sb = [s2 substringWithRange:range]; 
    result = [sa compare:sb]; 
    // result == 0 

爲什麼我會從這兩個競賽中得到不同的結果?據我所知,他們應該是一樣的?

+1

想要變得更加困惑? Try:result = [s1 compare:s1 options:NSLiteralSearch range:range]; – 2010-10-05 07:57:01

+0

這是-1!比較完全壞了嗎? – JOM 2010-10-06 03:56:09

回答

7

感謝CocoaDev郵件列表上那些善良的人,這裏有更好的答案!

方法簽名中涉及的'範圍'僅爲接收字符串的範圍

所以,在你的第一個例子中,你正在比較s1範圍內的字符和整個s2;並且正確地報告爲-1。

這也解釋了fluchtpunkt指出的明顯異常。

+0

嘿,很多解決方案!現在我只需要弄清楚如何使用這種禁用的比較。不會很容易... – JOM 2010-10-11 19:14:52

0

它沒有錯; sa和sb具有相同的值,但s1和s2不相同。

編輯:

對不起,看得太快。確實存在一個問題 - 見下文。

+0

我在第一次比較中使用範圍,是不是應該考慮到?爲什麼還有呢? – JOM 2010-10-05 07:18:12

+0

對不起 - 我現在看到了。嗯... – user333329 2010-10-05 08:24:12

+0

我認爲編譯器讓sa和sb成爲同一個對象 - 這樣就可以解釋爲什麼你在這種情況下得到0。但我仍然不明白爲什麼第一個版本不起作用!我已經嘗試了一些變化,現在我感到困惑... – user333329 2010-10-05 08:56:04