IOS isEqualToString不起作用

时间:2013-04-25 13:01:02

标签: iphone ios objective-c nsstring nsfilemanager

以下示例程序输出相同,但程序无法正常工作。

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]];

如何在此处进行编辑?

2 个答案:

答案 0 :(得分:12)

isEqualToString:的文档表明您可能遇到问题:

  

比较使用字符串的规范表示,用于   特定字符串是字符串的长度加上Unicode   组成字符串的字符。当这个方法比较两个   字符串,如果单个Unicodes是相同的,那么字符串是   等于,无论后备商店。适用于“文字”   字符串比较意味着各种Unicode分解规则   未应用,并且单独比较Unicode字符。的所以,   例如,“Ö”表示为组合字符序列“O”   和umlaut不会比较等于表示为一个Unicode的“Ö”   字符

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

此外,如果您还没有,请查看Apple示例代码“国际山脉”,该代码处理众多本地化问题。

答案 1 :(得分:-1)

您是否尝试将两个字符串转换为UTF-8然后进行比较?我不知道这是否有效,这只是一个想法。