【发布时间】:2017-05-30 11:15:28
【问题描述】:
我遇到了 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,并且不能以未转义的形式出现在字符串的末尾。'
【问题讨论】:
-
你的问题不清楚
-
添加有关您期望什么以及它给您什么的信息。
-
感谢反馈,我更新了问题
-
@"TEST\\¦TEST\\WORKS"创建字符串 'TEST\¦TEST\WORKS'。
标签: objective-c nsstring