3

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

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

如何在这里进行编辑?

4

2 回答 2

12

的文档isEqualToString:建议您可能有问题:

比较使用字符串的规范表示,对于特定字符串,它是字符串的长度加上构成字符串的 Unicode 字符。当此方法比较两个字符串时,如果各个 Unicode 相同,则无论后备存储如何,这些字符串都是相等的。“字面量”应用于字符串比较时,表示不应用各种 Unicode 分解规则,单独比较 Unicode 字符。因此,例如,表示为组合字符序列“O”和变音符号的“Ö”不会与表示为一个 Unicode 字符的“Ö”比较

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

此外,如果您还没有,请查看处理大量本地化问题的 Apple 示例代码“ International Mountains ”。

于 2013-04-25T13:08:09.550 回答
-1

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

于 2013-04-25T13:11:53.480 回答