![](/img/trans.png)
[英]iOS NSURLSession, how to retry in didCompleteWithError
[英]How to integrate NSUrlsession in ios
嗨,我是ios的新手,在我的应用程序中,我使用NSUrlSession集成服务。
这是我的主要问题,是当我从服务器收到响应时,无法正确处理它们。
responseObject = {
{
Name = Broad;
DeptNo = A00;
BatchNo = 23;
DeptId = 120;
},
{
Name = James;
DeptNo = B00;
BatchNo = 23;
DeptId = 123;
},
}
responseObject = {
error = 1;
message = "Invalid Code";
}
当我从服务器收到正确的响应时,我在下面的if block(like __NSCFArray objectForKey:]: unrecognized selector sent to instance 0x1611c200')
收到异常if block(like __NSCFArray objectForKey:]: unrecognized selector sent to instance 0x1611c200')
,当我收到错误的响应时,T会在else block
获取异常
请帮我如何处理
(void) GetCallService1: (id)MainResponse{
dispatch_async(dispatch_get_main_queue(), ^{
NameArray = [[NSMutableArray alloc]init];
IdArray = [[NSMutableArray alloc]init];
if([MainResponse objectForKey:@"error"] != nil)
{
NSLog(@"No data available");
}
else{
for (NSDictionary *obj in MainResponse) {
if([obj objectForKey:@"Name"] && [obj objectForKey:@"DeptNo"]) {
NSString * Name = [obj objectForKey:@"Name"];
[NameArray addObject:Name];
NSString * Id = [obj objectForKey:@"id"];
[IdArray addObject:Id];
}
}
}
});
}
1)如下更改您的实现
2)我检查字典类型和错误键是否有一定价值
3)之前您在Array上调用objectForKey,因此它崩溃了
-(void) GetCallService1: (id)MainResponse{
dispatch_async(dispatch_get_main_queue(), ^{
NameArray = [[NSMutableArray alloc]init];
IdArray = [[NSMutableArray alloc]init];
//here I checked is it dictionary type & error key has some value
if ([MainResponse isKindOfClass:[NSDictionary class ]] &&[MainResponse objectForKey:@"error"])
{
NSLog(@"No data available");
}
else{
for (NSDictionary *obj in MainResponse) {
if([obj objectForKey:@"Name"] && [obj objectForKey:@"DeptNo"]) {
NSString * Name = [obj objectForKey:@"Name"];
[NameArray addObject:Name];
NSString * Id = [obj objectForKey:@"id"];
[IdArray addObject:Id];
}
}
}
});
}
尝试这个:
//Result Block
typedef void (^ResultBlock)(id, NSError*);
//URL request
-(void)requestURL:(NSURLRequest *)request withResult:(ResultBlock)resultHandler{
//URLSession
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * data, NSURLResponse * response, NSError * error) {
if(!error){
NSError *jsonError = nil;
id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError];
if([result isKindOfClass:[NSArray class]]){
//Success
resultHandler(result,nil);
}
else if([result isKindOfClass:[NSDictionary class]]){
if([[result objectForKey:@"error"] integerValue]){
//Failure.
NSMutableDictionary *errorDetail = [NSMutableDictionary dictionary];
[errorDetail setValue:[result objectForKey:@"message"] forKey:NSLocalizedDescriptionKey];
NSError *error = [NSError errorWithDomain:@"Error" code:100 userInfo:errorDetail];
resultHandler(nil, errorDetail);
}
}
}
}];
[task resume];
}
//Call your requestURL method:
[self requestURL:request withResult:^(id result, NSError *error){
if(!error){
//Success, Read & update your list
}
else{
//Error
// NSLog(error.localizedDescription());
}
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.