2013-04-25 66 views
3

以下示例程序輸出相同,但程序無法正常工作。IOS isEqualToString不工作

NSDirectoryEnumerator *directoryEnumerator = [[NSFileManager defaultManager] 
            enumeratorAtPath:kDocdir]; 

for (NSString *pathi in directoryEnumerator) 
{ 
    NSString *fileName_Manager = [pathi lastPathComponent]; 
    NSLog(@"fileName_Manager = %@",fileName_Manager); 

    Artist *name_Databse = [self.fetchedResultsController 
           objectAtIndexPath:IndexPath]; 
    NSLog(@"name_Databse  = %@",name_Databse.name); 



    if ([fileName_Manager isEqualToString:name_Databse.name]) { 
     NSLog(@"Same Name"); 
    }else{ 
     NSLog(@"Different Name"); 
    } 

} 

輸出:

2013-04-25 15:37:43.256 Player[36436:907] fileName_Manager = alizée - mèxico - final j'en 
2013-04-25 15:37:43.272 Player[36436:907] name_Databse  = alizée - mèxico - final j'en 
2013-04-25 15:37:44.107 Player[36436:907] Different Name 

不名正常工作時的特殊字符。這是爲什麼發生? 謝謝...

這裏有同樣的問題:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@",[pathi lastPathComponent]]; 

如何進行編輯在這裏?

+0

試試只是isEqual: – Eric 2013-04-25 13:04:47

+3

你可能在你的字符串中有空格,嘗試刪除多餘的空格或換行符 – nsgulliver 2013-04-25 13:04:58

+1

請考慮我對答覆的高度優先答案! – GoZoner 2013-08-22 23:03:39

回答

12

isEqualToString:文檔建議你可能有一個問題:

比較使用字符串的規範表示,這對於 一個特定的字符串是字符串和Unicode的 字符組成的長度字符串。當此方法比較兩個 字符串時,如果單個Unicode相同,則字符串是 均等,無論後備存儲如何。當應用於 字符串比較時,「文字」意味着不應用各種Unicode分解規則 ,並單獨比較Unicode字符。 因此,例如,「Ö」表示爲組成字符序列「O」 ,而元音變音不會等於「Ö」,表示爲一個Unicode 字符

使用(NSOrderedSame == [string1 localizedCompare:string2])

另外,如果您還沒有,看看蘋果的示例代碼「國際山區」,這與衆多本地化問題涉及嘗試。

+0

非常感謝。 isEqualToStrings正常工作。在這裏有相同的問題:NSPredicate * predicate = [NSPredicate predicateWithFormat:@「name ==%@」,[pathi lastPathComponent]];我如何在這裏編輯? – user2041226 2013-04-25 13:15:23

+1

@ user2041226 [NSPredicate predicateWithFormat:@「name LIKE [cd]%@」,[pathi lastPathComponent]] – Anupdas 2013-04-25 13:26:54

+1

請考慮此複選的「複選標記」。 – GoZoner 2013-04-30 21:56:07

-1

您是否嘗試將兩個字符串轉換爲UTF-8,然後進行比較?我不知道這是否有效,這只是一個想法。