2016-05-04 9 views
2

私はUsernameとPasswordで保護されたウェブサイトを持っています。 XMLファイルを取得して解析する必要があります。私は多くの解決策を試みたが、どれも私のために働いていなかった。私はこのコードを取得しています。ここSwift + Alamofire - AuthとXMLファイルを取得

Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Encountered unknown tag tabless on line 1) UserInfo=0x1aadf300 {NSDebugDescription=Encountered unknown tag tabless on line 1, kCFPropertyListOldStyleParsingError=The operation couldn’t be completed. (Cocoa error 3840.)}

私のコードです:

func getTimeStampOfUpdatedTables(completionHandler: (Bool) ->()) ->(){ 

    let user = "abc" 
    let password = "abc" 

    let plainString = "\(user):\(password)" as NSString 
    let plainData = plainString.dataUsingEncoding(NSUTF8StringEncoding) 
    let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 

    Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Basic " + base64String!] 

    Alamofire.request(.GET, "http://example.com/info.php", encoding: ParameterEncoding.URL).responsePropertyList { response in 
     print(response.result) 
     if let error = response.result.error { 
      print("Error: \(error)") 

      // parsing the data to an array 
     } else if let array = response.result.value as? [[String: String]] { 

      if array.isEmpty { 
       print("No data") 

      } else { 
       //Do whatever you want to do with the array here 
       print("data here!") 
      } 
     } 
    } 
} 

答えて

0

するTryベロコード: -

func getTimeStampOfUpdatedTables(completionHandler: (Bool) ->()) ->(){ 

    let username = "abc" 
    let password = "abc" 

      let credentialData = "\(username):\(password)".dataUsingEncoding(NSUTF8StringEncoding)! 
     let base64Credentials = credentialData.base64EncodedStringWithOptions([]) 
     let headers = ["Authorization": "Basic \(base64Credentials)"] 

     let manager = Alamofire.Manager.sharedInstance 

     manager.session.configuration.timeoutIntervalForRequest = 300 

     manager.request(.GET, url,parameters: dicsParams, headers: headers).responsePropertyList { response in 
     print(response.result) 
     if let error = response.result.error { 
      print("Error: \(error)") 

      // parsing the data to an array 
     } else if let array = response.result.value as? [[String: String]] { 

      if array.isEmpty { 
       print("No data") 

      } else { 
       //Do whatever you want to do with the array here 
       print("data here!") 
      } 
     } 
    } 
} 
+0

dicsParamsとは何ですか? –

+0

discParamはパラメータ辞書です。 –

+0

はい、提供されたコードには、この辞書の識別子はありません。 –

1

あなたのAPIレスポンスはXMLでないプロパティリスト形式であるため、エラーが指定されています。 Alamofireからプロパティリストを要求しているため、pList形式が見つからず、エラーが発生していました。私はPLISTでコードをテストし、それがここで

は、XMLデータを解析するためのプロパティリスト形式

<?xml version="1.0" encoding="UTF-8"?> 

<plist version="1.0"> 
    <dict> 
     <key>Tabless</key> 
     <dict> 
      <key>Tables</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 
      <key>Tables - 2</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 
      <key>Tables - 3</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 
      <key>Tables - 4</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 
      <key>Tables - 5</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 
      <key>Tables - 6</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 
      <key>Tables - 7</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 
      <key>Tables - 8</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 
      <key>Tables - 9</key> 
      <dict> 
       <key>test</key> 
       <string>test</string> 

      </dict> 

I HAVE TESTED THE WHOLE THING

 let user = "abc" 
    let password = "abc" 

    let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)! 
    let base64Credentials = credentialData.base64EncodedStringWithOptions([]) 

    let headers = ["Authorization": "Basic \(base64Credentials)"] 
    Alamofire.request(.GET, "http://192.168.0.100/r.php", headers: headers) 
     .responsePropertyList { response in 

     print(response.result) 
     if let error = response.result.error { 
      print("Error: \(error)") 

      // parsing the data to an array 
     } else if let array = response.result.value as? [[String: String]] { 

      if array.isEmpty { 
       print("No data") 

      } else { 
       //Do whatever you want to do with the array here 
       print("data here!") 
      } 
     } 
    } 

である、あなたはSWXMLHashを検討する可能性がうまく働きました。 Alamofireリクエストは次のようになります。

Alamofire.request(.GET, url, parameters: parameters) 
     .response { (request, response, data, error) in 
      println(data) // if you want to check XML data in debug window. 
      var xml = SWXMLHash.parse(data!) 
      println(xml["tabless"][0]["TABLE_NAME"].element?.text) 
     } 
関連する問題