2015-09-27 89 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年,無理監控,身份盜用和數據泄露事件的發生頻率超出您的預期。