2015-09-27 91 views
0

为布尔方法我有这个Web服务:Objective-C的 - 从Web服务

<boolean xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</boolean> 

而且我在这里有这样的方法:

-(void)deviceCheck:(NSString *)device Completetion:(void (^) (NSArray * result,NSError * error))completion{ 
    NSString *deviceRequestString = [NSString stringWithFormat:@"%@?device=%@",webservice,device]; 
    NSURL *JSONURL = [NSURL URLWithString:deviceRequestString]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:JSONURL]; 
    NSURLSessionDataTask * dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request 
                     completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
                      if(data == nil){ 
                       completion(nil,error); 
                       return; 
                      } 
                      NSError *myError; 
                      NSArray *tableArray = [[NSArray alloc]initWithArray:[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&myError]]; 
                      completion(tableArray,myError); 
                     }]; 
    [dataTask resume]; 
} 

,但是当我把这个:

[self deviceCheck:[[UIDevice currentDevice] name] Completetion:^(NSArray *result, NSError *error) { 

      if(result == nil){ 

       UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Message" message:@"Device is not valid." preferredStyle:UIAlertControllerStyleAlert]; 

       UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
       [alertController addAction:ok]; 

       [self presentViewController:alertController animated:YES completion:nil]; 

      }else{ 

      } 
}]; 

结果为零。

我在这里做错了什么?我将如何调用这个布尔型的Web服务。

我做了的NSLog上的错误:

Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection. 

修正了一个错误与此:https://github.com/meteor/meteor/issues/4560

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." 
+0

做一些调试。在'dataTaskWithRequest'完成方法中,data''nil'?如果是这样,错误是什么? – rmaddy

+0

数据是零,现在我有断点问题,看来我的方法是不会被调用 –

+0

这是错误我得到NSError \t NSError \t域:@“NSURLErrorDomain” - 代码:4294966294 –

回答

1

您正在使用NSJSONSerialization解析Web服务的响应。但是,您的Web服务正在返回XML而不是JSON

所以你想要做的是要么看看你的网络服务可以返回JSON响应或更改您的代码来解析该响应XML

您可以使用内置的NSXMLParser类来解析XML响应。但它水平低,需要大量的代码。

+0

如何woudl我更改我的代码来解析XML –

+0

请参阅我的修改答案。如果您有后续问题,请查阅“NSXMLParser”的文档并在此处发布一些代码。 –

0

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

自iOS9以来,Apple要求您将HTTP与正确配置的SSL端点进行通话。如果您的Web服务没有使用正确的SSL端点,那么您需要修复该问题。

如果您无法修复您的Web服务以使用良好的SSL配置,那么您必须认真思考这是一个好主意。如果您的服务可以通过纯HTTP而不通过SSL访问,那么攻击者在很多情况下可以监听甚至修改对Web服务的调用。

如果您想对应用运输安全要求例外,那么您可以在应用程序的Info.plist文件中这样做。这是有据可查的App Transport Security Technote

个人观点:完全禁用ATS,通过设置NSAllowsArbitraryLoadsYES,是不是一个解决方案。这通常是一种懒惰的解决方法,可能会让用户处于危险之中。特别是在2015年,无理监控,身份盗用和数据泄露事件的发生频率超出您的预期。