我遇到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,并且不能在字符串的末尾显示未转义。'
答案 0 :(得分:0)
这里的问题是amd64
和NSTaggedPointerString
在LLDB输出中以不同的方式显示单个反斜杠。
您可以使用__NSCFString
而不是po
来以相同的方式查看它们。
您还可以在NSString上使用p
方法来检查length
显示为NSTaggedPointerString
但\
显示为__NSCFString
的内容实际上只是一个字符。