说明:在整个应用程序中,我们使用位于AppDelegate.m中的Web请求方法从服务器获取数据。我在所有这些请求中都使用了令牌。有时来自服务器的响应是json:{error =“token_not_provided”}或{error =“token_expired”}。我需要一种方法来测试json是否包含这些错误或正确的json数据。如果发回的数据是这些错误中的任何一个,我们需要返回登录屏幕以在登录时获得新令牌。现在,我无法在请求方法中检测到这些错误,因此如果它们发生,应用程序将永远崩溃,因为无法将您带回登录。以下是App Delegate中的请求方法:
-(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 :(得分:1)
如果您可以修改服务器上的界面,则可以发送bool以确定请求是否成功。像“成功”的东西= 1或0。
要检查错误消息是否危险,如果消息发生更改,您的应用将崩溃。如果你想要这样做,你需要检查密钥“错误”是否存在,然后检查它包含的内容。
// 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而不是数据。