我有这个网络服务:
<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 :(得分: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年,无理由监控,身份盗窃和数据泄露的发生频率超出了您的预期。