【iOS】一些BUGs/TIPs記錄

來源:互聯網
上載者:User

標籤:

目錄


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記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.