Objective-C - 来自webservice的bool方法

时间:2015-09-27 21:03:13

标签: ios objective-c

我有这个网络服务:

<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."

2 个答案:

答案 0 :(得分:1)

您正在使用func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{ let oldText: NSString = textField.text! let newText: NSString = oldText.stringByReplacingCharactersInRange(range, withString: string) let count = newText.length if count <= 5 { print("\(count)") return true } else { return false } } 来解析您的网络服务的响应。但是,您的网络服务正在返回NSJSONSerialization而不是XML

因此,您要做的就是查看您的网络服务是否可以返回JSON个响应,或者更改您的代码以解析JSON响应。

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

答案 1 :(得分:0)

  

无法加载资源,因为App Transport Security策略要求使用安全连接。

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

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

如果您想对 App Transport Security 要求例外,那么您可以在应用程序的Info.plist文件中执行此操作。这在App Transport Security Technote

中有详细记载

个人观点:将NSAllowsArbitraryLoads设置为YES,完全禁用ATS不是解决方案。这通常是一种懒惰的解决方法,可能会使您的用户面临风险。特别是在2015年,无理由监控,身份盗窃和数据泄露的发生频率超出了您的预期。