componentsSeparatedByString反斜杠转义

时间:2017-05-30 11:15:28

标签: objective-c nsstring

我遇到NSString componentsSeparatedByString方法的问题。

以下是一个例子:

(lldb) p [[@"TEST\\¦TEST\\WORKS" componentsSeparatedByString:@"¦"] objectAtIndex: 0]
(NSTaggedPointerString *) $13 = 0xa00005c545345545 @"TEST\"
(lldb) p [[@"TEST\\¦TEST\\WORKS" componentsSeparatedByString:@"¦"] objectAtIndex: 1]
(__NSCFString *) $14 = 0x000000017023f440 @"TEST\\WORKS"

在我看来,最后带有反斜杠的子字符串会丢失正确的反斜杠\\

在上面的示例中,我希望在第一种情况下使用NSString(@"TEST\\")而不是我得到一个NSTaggedPointerString(@"TEST\"),其中最后一个字符未正确转义。

我做错了什么或假设该方法的工作方式不同?

我问这个问题,因为我必须在NSPredicate中使用子字符串,我得到以下异常:

NSArray *explodePair = [pair componentsSeparatedByString:@"¦"];
NSString *colorCode = [explodePair count] > 0 ? [explodePair firstObject] : nil;
[self.colors filteredOrderedSetUsingPredicate:[NSPredicate predicateWithFormat:@"code LIKE %@", colorCode]]
  

由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:'反斜杠是通配符   char,并且不能在字符串的末尾显示未转义。'

1 个答案:

答案 0 :(得分:0)

这里的问题是amd64NSTaggedPointerString在LLDB输出中以不同的方式显示单个反斜杠。

您可以使用__NSCFString而不是po来以相同的方式查看它们。

您还可以在NSString上使用p方法来检查length显示为NSTaggedPointerString\显示为__NSCFString的内容实际上只是一个字符。