説明: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
}
}];
}
IF([データvalueForKey: "エラー" @] isEqualToString: "token_not_provided" @] || [[データvalueForKey: "エラー" @] isEqualToString: "token_expired" @])私は使用できません{ 適切なjsonが含まれているとクラッシュする可能性があるためテストする } – user3773060
コメントに情報を追加しないでください。あなたの質問を関連するすべての詳細で[編集]してください。 – rmaddy
'NSURLResponse'を' NSHTTPURLResponse'にキャストし、httpステータスコードをチェックすることができます。トークンエラーは主に '401' – Desdenova