2017-09-21 14 views
1

説明:App全体で、AppDelegate.mにあるWebリクエストメソッドを使用して、サーバーからデータを取得します。これらのすべてのリクエストでトークンを使用します。サーバーからの応答は、json:{error = "token_not_provided"}または{error = "token_expired"}です。 jsonにこれらのエラーや適切なjsonデータが含まれているかどうかをテストする方法が必要です。返されたデータがこれらのエラーのいずれかである場合は、ログイン時に新しいトークンを取得するためにログイン画面に戻る必要があります。今のところ、私はリクエストメソッドでこれらのエラーを検出する方法がないので、ログインするための方法がないため、アプリケーションが永久にクラッシュします。あなたは、要求が成功したかどうかを確認するためにブール値を送ることができ、サーバー上のインターフェイスを変更することができる場合Jsonレスポンスにエラーまたは適切なjsonが含まれているかどうかをテストする方法

-(void)makeRequest:(NSString*)urlString method:(NSString*)method params:(NSMutableDictionary*)params onComplete:(RequestBlock)callback { 

// create the url 
    NSURL * url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", BASE_URL, urlString]]; 
    NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:url]; 


    KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil]; 

    NSString *token = [keychainItem objectForKey:(__bridge id)(kSecAttrAccount)]; 

    if(!token){ 

     token = @"NO_TOKEN"; 



    } 


    // set the method (GET/POST/PUT/UPDATE/DELETE) 
    [request setHTTPMethod:method]; 
    [request addValue:[@"Bearer " stringByAppendingString:token] forHTTPHeaderField:@"Authorization"]; 


// if we have params pull out the key/value and add to header 
    if(params != nil) { 
     NSMutableString * body = [[NSMutableString alloc] init]; 
     for (NSString * key in params.allKeys) { 
      NSString * value = [params objectForKey:key]; 
      [body appendFormat:@"%@=%@&", key, value]; 
    } 
     [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]]; 
} 

// submit the request 
    [NSURLConnection sendAsynchronousRequest:request 
            queue:[NSOperationQueue mainQueue] 
         completionHandler:^(NSURLResponse *response, 
NSData *data, NSError *connectionError) { 

          // do we have data? 
          if(data && data.length > 0) { 

           NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 

           // if we have a block lets pass it 
           if(callback) { 
            callback(json); 


          } 

           HERE IS WHERE I WANT TO TEST IF WE HAVE ERROR JSON or PROPER JSON 


          } 


    }]; 

}

+0

IF([データvalueForKey: "エラー" @] isEqualToString: "token_not_provided" @] || [[データvalueForKey: "エラー" @] isEqualToString: "token_expired" @])私は使用できません{ 適切なjsonが含まれているとクラッシュする可能性があるためテストする } – user3773060

+0

コメントに情報を追加しないでください。あなたの質問を関連するすべての詳細で[編集]してください。 – rmaddy

+0

'NSURLResponse'を' NSHTTPURLResponse'にキャストし、httpステータスコードをチェックすることができます。トークンエラーは主に '401' – Desdenova

答えて

1

:ここではアプリの委任のリクエスト方法があります。 "成功" = 1または0のようなものです。

エラーメッセージを確認すると危険です。メッセージが変更されると、アプリがクラッシュします。とにかくそれをやりたいのであれば、キー "error"が存在するかどうか、それに何が含まれているかをチェックする必要があります。

// Check if key is available. 
if ([json.keys containsObject:@"error"]) { 
    if ([json[@"error"] isEqualToString:@"token_not_privided"] || [json[@"error"] isEqualToString:@"token_expired"]) { 
     // Token is invalid 
    } else { 
     // Something different went wrong. 
    } 
} 
// Nothing is wrong, lets inform the caller. 
else { 
    if (callback) { 
     callback(json); 
    } 
} 

あなたはjsonをチェックし、データはチェックしないでください。

関連する問題