componentsSeparatedByString反斜杠转义

问题描述 投票:0回答:1

我遇到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,并且不能在字符串末尾显示未转义。

objective-c nsstring
1个回答
0
投票

这里的问题是NSTaggedPointerString__NSCFString令人困惑地在LLDB输出中以不同方式显示单个反斜杠。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.