【发布时间】:2015-09-07 05:56:56
【问题描述】:
最近,我尝试在 swift 项目中使用 NSpredicate 进行电话号码验证,但它总是崩溃。 代码是这样的:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
var regexPhoneNum = NSPredicate(format: "SELF MATCHES %@", "^1[0-9]{10}$")
println(regexPhoneNum)
return true
}
它崩溃了
var regexPhoneNum = NSPredicate(format: "SELF MATCHES %@", "^1[0-9]{10}$")
崩溃信息:
2015-09-08 09:51:17.044 PredicateTest[4319:79934]-[__NSCFString count]:无法识别的选择器发送到实例 0x7c153110我发现这个崩溃是由使用 Objective-C 的 NSString 类别引起的,代码如下:
.h
@interface NSString (HttpManager)
- (NSString *)encode;
@end
.m
@implementation NSString (HttpManager)
- (NSString *)encode
{
NSString *outputString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8
));
outputString = [outputString stringByReplacingOccurrencesOfString:@"<null>" withString:@""];
return outputString;
}
@end
谁能解决这个问题或者给我一些建议,谢谢!
【问题讨论】:
-
在我的情况下,它没有在 xcode 7 beta 5 上进行崩溃测试
-
我也无法重现 Xcode 6.4 的问题。那是你的确切代码吗? – 错误消息表明您在需要 NSArray 的地方有一个 NSString。
-
好吧,我创建一个新项目并将代码行粘贴到'application didFinishLaunching'函数中也可以正常运行。这是我的确切代码,谢谢
-
抱歉,我发现是 NSString 类别导致的崩溃,但是为什么?
标签: ios objective-c c swift nspredicate