標籤:
目錄
1,[NSString containsString:]在iOS7會崩潰(廢話) 2,使用AFNetworking的時候,如果想要看發送的具體連結是什麼請在這裡打斷點
3,遇到噁心的server,返回資料的時候先告訴你error,然後在body裡面放錯誤資訊....
1,[NSString containsString:]在iOS7會崩潰(廢話)
解決:網上的改法一般是在nsstring裡面加上一個containsString函數,但是這樣無法根據版本號碼判斷調用(在那裡判斷的話會導致死迴圈,可以試下玩玩~),所以可以考慮單獨列出來。
[self containsString:string andSubString:@" "]- (BOOL)containsString:(NSString *)oString andSubString:(NSString *)subString { if ([[UIDevice currentDevice] systemVersion].floatValue >= 8.0) { return [oString containsString:subString]; } else if ([oString rangeOfString:subString].location != NSNotFound) { return YES; } return NO;}
2,使用AFNetworking的時候,如果想要看發送的具體連結是什麼請在這裡打斷點:
AFURLRequestSerialization.m 331行
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method URLString:(NSString *)URLString parameters:(id)parameters error:(NSError *__autoreleasing *)error{ NSParameterAssert(method); NSParameterAssert(URLString); NSURL *url = [NSURL URLWithString:URLString]; NSParameterAssert(url); NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; mutableRequest.HTTPMethod = method; for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) { [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath]; } } mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy]; return mutableRequest;}
找不到的話查詢mutableRequest就好。另外,如果是post類型的,在331行return前斷掉,輸入po parameters就可以檢查你傳的參數了。可惜的是這時候參數還沒有被encode喲~
3,遇到噁心的server,返回資料的時候先告訴你error,然後在body裡面放錯誤資訊....
AFNetworking本身是不會幫你解析的。這時沒辦法的你只能改AFNetworking了...
試試利用 AFHTTPRequestOperation *operation 這個變數在error的時候解析
我們的項目裡這樣改的:BCJSONObjectRequest.m
- (void)sendRequest { _tag = sTag ++; [self buildParams]; //解析 void (^success)(AFHTTPRequestOperation *operation, id responseObject) = ^(AFHTTPRequestOperation *operation, id responseObject) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSError *erro; id result = [self parseResponse:responseObject error:&erro]; dispatch_async(dispatch_get_main_queue(), ^{ //在主線程回調 if (erro != nil) { [self inerJsonResultFailed:erro]; }else { [self inerJsonResultSuccess:result]; } }); }); }; void (^failure)(AFHTTPRequestOperation *operation, NSError *error) = ^(AFHTTPRequestOperation *operation, NSError *error) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ id erro = [self parseErro:error]; dispatch_async(dispatch_get_main_queue(), ^{ NSError *parseErro; id result = [self parseResponse:operation.responseObject error:&parseErro]; if (result != nil && operation.responseObject != nil) { if ([result isKindOfClass:NSError.class]) { [self inerJsonResultFailed:result]; } else{ [self inerJsonResultSuccess:result]; } } else { //在主線程回調 [self inerJsonResultFailed:erro]; } }); }); }; //調用請求 BCHTTPFacade *manager = [BCHTTPFacade shareFacade]; switch (self.requestMethod) { case Get: self.requestOperation = [manager GET:_url parameters:self.params success:success failure:failure]; break; case Post: if (self.mutipartBlock) { [manager POST:_url parameters:self.params constructingBodyWithBlock:self.mutipartBlock success:success failure:failure]; }else { self.requestOperation = [manager POST:_url parameters:self.params success:success failure:failure]; } break; default: LogError(@"UnSupport method:requestMethod = %d,url = %@",self.requestMethod,self.url); break; }}
【iOS】一些BUGs/TIPs記錄