2015-09-07 37 views
0

最近,我嘗試使用NSpredicate在swift項目中驗證電話號碼,但它總是崩潰。 的代碼是這樣的:爲什麼在編碼URL時格式化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]: unrecognized selector sent to instance 0x7c153110 

我發現引起的NSString的類別,它使用Objective-C的那一聲,代碼如下:

.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 

任何人誰可以解決這個問題,或者給我一些建議,謝謝!

+0

在我的情況下,它沒有崩潰在xcode 7 beta 5測試 –

+0

我也不能重現與Xcode 6.4的問題。這是你的確切代碼嗎? - 錯誤信息表明你有一個NSString的地方需要一個NSArray。 –

+0

好吧,我創建了一個新項目,並在'application didFinishLaunching'函數中粘貼代碼行也能正確運行。這是我的確切代碼,謝謝 –

回答

0

明白吧!可能NSPredicate格式化字符串默認使用編碼方法!該類別的編碼與系統的衝突...朋友們要小心這種情況。我只需通過添加前綴來更改方法名稱並解決問題!