正如Leon在他的評論中所說的,評論出NSParameterAssert
不是一個理想的解決方案。一個斷言已被放在那裏,原因是作者AFNetworking
。未通過斷言的代碼很可能是由無效的URL引起的。
請記住,工廠方法(即+ URLWithString:
及其兄弟)在傳遞無效URL字符串時將返回nil
。在這種情況下,無效字符串是包含無效URL的字符串。
你應該做什麼而不是評論我們的斷言,確保你沒有向你的AFHTTPClient
實例傳遞任何無效的URL。 This Stackoverflow answers給出了一個如何驗證URL的例子。下面是從回答樣本:
- (BOOL)validateUrl:(NSString *)candidate {
NSString *urlRegEx = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx];
return [urlTest evaluateWithObject:candidate];
}
或者,您可以添加使用NSString
的stringByAddingPercentEscapesUsingEncoding
百分比法逃逸。就像這樣:
NSString *encoded = [notEncoded stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
我現在也在努力解決這個問題。你有沒有找到解決方案? – Leon
我評論了第227行:// NSParameterAssert(url); 它的工作原理.. – arlg
這將有助於如果您將代碼包含在程序出錯的地方。但是,您應該檢查是否在URL參數中傳遞nil,如:[[[AFHTTPClient alloc] initWithBaseURL:nil]'。 NSParameterAssert(url)就是爲了防止用一個零URL來初始化HTTP客戶端。 –