2017-02-10 4 views
0

Ich erhielt Cannot assign value of type 'Any' to type 'String?' , wenn ich den posts Wert an cell.textLabel?.text übergebe, habe ich Antwort vom Seifenservice erhalten, und ich füge zu den Pfosten posts.add(elements) hinzu. und ich möchte auch, dass Posts passieren meiner secondViewController bitte Thankyou helfen,Kann keinen Wert des Typs 'Any' dem Typ 'String?'

import UIKit 

class ViewController: UIViewController ,XMLParserDelegate,UITextFieldDelegate, NSURLConnectionDelegate, UITableViewDelegate , UITableViewDataSource { 

    @IBOutlet var firstName: UITextField! 

    @IBOutlet var lastName: UITextField! 

    @IBOutlet var tableView: UITableView! 

    var parser = XMLParser() 

    var posts = NSMutableArray() 

    var elements = NSMutableDictionary() 
    var element = NSString() 
    var title1 = NSMutableString() 
    var date = NSMutableString() 

    var xmlData = NSMutableData() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.dataSource = self 
     tableView.delegate = self 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return posts.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = UITableViewCell() 

     cell.textLabel?.text = posts[indexPath.row] // Cannot assign value of type 'Any' to type 'String?' 

     print(indexPath.row) 
     return cell 
    } 

    func beginParsing() 
    { 
     posts = [] 
     parser = (XMLParser(data:xmlData as Data)) 
     parser.delegate = self 
     parser.parse() 
     //tbData!.reloadData() 

     for element in posts { 
      print(element) 
     } 
    } 

    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) 
    { 
     element = elementName as NSString 

     if (elementName as NSString).isEqual(to: "response") 
     { 
      elements = NSMutableDictionary() 
      elements = [:] 
      title1 = NSMutableString() 
      title1 = "" 
      date = NSMutableString() 
      date = "" 

     } 
    } 

    func parser(_ parser: XMLParser, foundCharacters string: String) 
    { 


     // let data = string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased() 

     // let str = data.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil) 

     if element.isEqual(to: "status") 
     { 
       title1.append(string) 

     } 
     else if element.isEqual(to: "message") { 
      date.append(string) 
     } 
    } 

    func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) 
    { 
     if (elementName as NSString).isEqual(to: "response") 
     { 

      if !title1.isEqual(nil) { 
       elements.setObject(title1, forKey: "status" as NSCopying) 
      } 
      if !date.isEqual(nil) { 
       elements.setObject(date, forKey: "message" as NSCopying) 
      } 
      posts.add(elements) 
     } 
    } 


    @IBAction func invoke(_ sender: Any) { 

     let firstNmaeValue = firstName.text 
     let lastNameValue = lastName.text 

     let is_SoapMessage = String (format :"<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'><soapenv:Header/><soapenv:Body><doRegisterUser soapenv:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'><firstNameValue>\(firstNmaeValue)</firstNameValue><lastNameValue>\(lastNameValue)</lastNameValue></doRegisterUser></soapenv:Body></soapenv:Envelope>") 

     let is_URL: String = "http://192.168.43.23/app/app/service/nm.php?wsdl" 

     let lobj_Request = NSMutableURLRequest(url: NSURL(string: is_URL)! as URL) 
     let session = URLSession.shared 

     lobj_Request.httpMethod = "POST" 
     lobj_Request.httpBody = is_SoapMessage.data(using: String.Encoding.utf8) 

     lobj_Request.addValue("192.168.43.23", forHTTPHeaderField: "Host") 

     lobj_Request.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type") 

     lobj_Request.addValue(String (is_SoapMessage), forHTTPHeaderField: "Content-Length") 

     lobj_Request.addValue("http://192.168.43.23/app/app/service/nm.php/doRegisterUser", forHTTPHeaderField: "SOAPAction") 

     let task = session.dataTask(with: lobj_Request as URLRequest, completionHandler: {data, response, error -> Void in 

      print("response = \(response)") 




      let xmlData = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 


      self.xmlData = NSMutableData(data: data!) 

      print("Body: \(xmlData)") 

      self.beginParsing() 

      print("Status is = \(self.title1)") 

      print("Message is = \(self.date)") 

      if error != nil 
      { 
       print("Error: ") 
      } 

     }) 
     task.resume() 

    } 

} 
+0

Ihre 'posts' Array ist ein' NSMultableArray' die Any zu einem String .. werfen von nicht spezifiziertem Typ, so dass seine Elemente vom Typ 'Any' sind, deshalb müssen Sie es zuerst in eine Zeichenkette umwandeln und dann einstellen. –

+0

Wenn Sie sicher sind, dass 'posts [indexPath.row]' '' '' zurückgibt, versuchen Sie 'posts [indexPath.row] als? Schnur ?? "" –

+0

@Dharmesh Kheni, @ Xcoder123 Vielen Dank für die Hilfe, eine Idee, wie kann ich diese "Beiträge" in TableView drucken? – ViralRathod

Antwort

3

Sie benötigen

cell.textLabel?.text = posts[indexPath.row] as? String 
+0

' cell.textLabel? .text = Beiträge [indexPath.row] als? Schnur ?? "andere string" 'könnte besser sein für die Fehlerbehandlung –

+0

@Callam, Danke seine behoben. – ViralRathod

+0

@callam Aber meine Antwort ist nicht in meinem tableView drucken, können Sie mir eine Idee darüber bitte – ViralRathod

Verwandte Themen