2015-09-14 6 views
1

im очень новый при программировании Swift (я сотовый биолог), но мне удалось получить довольно приличное приложение, использующее Swift 1.2. Приложение подключается к одной из систем LIMS моей лаборатории через веб-службы и выполняет различные задачи, такие как повторное подключение пользователей, выборка HTML и выборка PDF-файлов.Вызов WebService в Swift 2.0 vs Swift 1.2

Я решил перейти на бета-версию Xcode 7 и сделать свое приложение будущим, но, к сожалению, не удастся выйти из моего элемента. Мне удалось исправить большинство проблем, но я не могу заставить часть webservice функционировать. Может ли кто-нибудь, возможно, указать мне в правильном направлении. Ниже приведен фрагмент кода, который отвечает за часть webservice того, что я делаю.

Очевидно, что NSURLConnection больше не работает, поэтому я предполагаю, что это главное, что нужно изменить. Любая помощь будет высоко ценится! Я не хочу всю свою работу, тратятся впустую из-за Swift 2.0

var mutableData:NSMutableData = NSMutableData.alloc() 
var currentElementName:NSString = "" 
override func viewDidLoad() { 
    super.viewDidLoad() 
    currentws = "" 
    let soapMessage = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:web='http://www.labware.com/webservice'><soapenv:Header/><soapenv:Body><web:invoke><!--Optional:--><web:authToken>\(authCode)</web:authToken></web:invoke></soapenv:Body></soapenv:Envelope>" 

    let urlString = webAddress + "DEMO_USERS" 

    let url = NSURL(string: urlString) 

    let theRequest = NSMutableURLRequest(URL: url!) 

    let msgLength = String(soapMessage.characters.count) 

    theRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type") 
    theRequest.addValue(msgLength, forHTTPHeaderField: "Content-Length") 
    theRequest.HTTPMethod = "POST" 
    theRequest.HTTPBody = soapMessage.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) // or false 
    theRequest.timeoutInterval = 30 

    let connection = NSURLConnection(request: theRequest, delegate: self, startImmediately: true) 
    connection?.start() 

    if (connection == true) { 
     let mutableData : Void = NSMutableData.initialize() 
    } 
    test.reloadData() 

} 

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

func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) { 
    mutableData.length = 0; 
} 

func connection(connection: NSURLConnection, didReceiveData data: NSData) { 
    mutableData.appendData(data) 

} 


func connectionDidFinishLoading(connection: NSURLConnection) { 
    let xmlParser = NSXMLParser(data: mutableData) 
    xmlParser.delegate = self 
    xmlParser.parse() 
    xmlParser.shouldResolveExternalEntities = true 


} 
// NSXMLParserDelegate 

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 
    currentElementName = elementName 

} 


func parser(parser: NSXMLParser, foundCharacters string: String?) { 
    if currentElementName == "ns:return" { 
     if (currentws == "") { 
         userString = string! 


      activityIndicator.stopAnimating() 
      UIApplication.sharedApplication().endIgnoringInteractionEvents() 

      //println(authCode) 
       test.reloadData() 
     } else { 
      reactstatus = "User Reactivated" 
      let alert = UIAlertController(title: "Success", message: "User : \(userName) successfully reactivated!", preferredStyle: UIAlertControllerStyle.Alert) 
      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 
    } else if currentElementName == "faultstring" { 

     activityIndicator.stopAnimating() 
     UIApplication.sharedApplication().endIgnoringInteractionEvents() 
     let alert = UIAlertController(title: "Alert", message: string, preferredStyle: UIAlertControllerStyle.Alert) 
     alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
     self.presentViewController(alert, animated: true, completion: nil) 


    } 



} 
+1

я получил, что отсюда [ссылка] (http://webindream.com/soap-with-swift/#comment-222) – Chopz

+0

Любой разработчик IOS, кто знаком с SOAP. Мы действительно нуждаемся в серьезной помощи, потому что, как вы видите, никаких учебных пособий недостаточно для предоставления нам подобных Alamofire или AFNetworking, которые используют RESTful.Any, помогите кому угодно ... –

ответ

1

Хорошо так что вам нужно, чтобы избавиться от методов подключения и использования соединения в Eveything, и вы будете должны использовать сеанс вместо этого. Я сделал свою работу. Вы все еще можете разобрать его точно так, как вы его используете, с этим нет никаких проблем. Просто используйте сеанс не соединение

+0

Хорошо, спасибо! Я попробую это. – Chopz

+0

Мне тоже очень нужна серьезная помощь с веб-службой SOAP, потому что все уроки, которые мы получили от google, устарели. Так, любой пример учебника с использованием swift 2.1 или 2.0 спасибо ... Помогите нам –

0
let session = NSURLSession.sharedSession() 
     let request = NSMutableURLRequest(URL: NSURL(string: "webserviceLink")!) 

    request.HTTPMethod = "POST" 

    let data = "" 
    request.HTTPBody = data.dataUsingEncoding(NSASCIIStringEncoding) 

    let task = session.dataTaskWithRequest(request, completionHandler: {(data,response,error) in 


     do 
     { 
      let resultJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) 

      let arrayJSON = resultJSON as! NSArray 

      // self.arrPerson = arrayJSON 

     } 
     catch 
     { 
      print("Recieved not- well Formatted JSON") 
     } 
    }) 

    task.resume() 
Смежные вопросы