天天看點

AFNetworking,處理傳回資料時出現Error Domain=NSCocoaErrorDomain Code=3840 錯誤

報錯:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unescaped control character around character 2884.) UserInfo=0x79fa60b0 {NSDebugDescription=Unescaped control character around character 2884.}

原因在于出現特殊字元是AFNetworking無法解析的,會直接報錯,那麼當你在發post請求時,傳回結果會直接進如fail代碼塊,其實在fail中用operation的nsstring可以直接輸出接收到的資料,是string形,可以清楚的看到伺服器端資料有哪些含有特殊字元,但是有一些字元是不好看到的,比如“TAB”(制表)鍵打出的那種四個空格,項目中使用者有時候很常用到tab鍵,最好的方法是在AFNetworking源碼中添加字元過濾功能

處理辦法:找到AFNetworking包中AFURLResponseSerialization.m檔案,大概在第256行的 if (responseString && ![responseStringisEqualToString:@" "])(此時已将data轉化為responseString形)條件下面添加如下過濾方法:

NSCharacterSet *controlChars = [NSCharacterSet controlCharacterSet];
                NSRange range = [responseString rangeOfCharacterFromSet:controlChars];
                if (range.location != NSNotFound)
                {
                    NSMutableString *mutable = [NSMutableString stringWithString:responseString];
                    while (range.location != NSNotFound)
                    {
                        [mutable deleteCharactersInRange:range];
                        range = [mutable rangeOfCharacterFromSet:controlChars];
                    }
                    responseString = mutable;
                }
           

OK,再試一下,應該不會在報錯了。